[C/C++] string replace all 문자열 모두 치환
반응형
std::string ReplaceAll
STL의 std::string를 이용하여 간단하게 문자열을 치환할 수 있다.
기본적으론 string.replace가 존재하며 해당 기능은 1번만 치환되므로 모든 문자를 치환하려면 추가로 작업을 해주어야 한다.
다음 코드를 보자
#include <string> std::string replace_all( __in const std::string &message, __in const std::string &pattern, __in const std::string &replace ) { std::string result = message; std::string::size_type pos = 0; while ((pos = result.find(pattern)) != std::string::npos) { result.replace(pos, pattern.size(), replace); } return result; }
정상으로 보이는데 뭐가 문제일까..??
실제 테스트 해보면 알 수 있듯이 replace 하려는 문자가 pattern 보다 긴 경우 문자열을 덮어씌우는 현상이 발생한다.
ex)
std::string message = "test message";
text = replace_all(message, "test", "wawawa");
text = wawawaessage 가 된다.
이런 문제점때문에 아래와같은 방법으로 문제 해결이 가능하다.
#include <string> std::string replace_all( __in const std::string &message, __in const std::string &pattern, __in const std::string &replace ) { std::string result = message; std::string::size_type pos = 0; std::string::size_type offset = 0; while ((pos = result.find(pattern, offset)) != std::string::npos) { result.replace(result.begin() + pos, result.begin() + pos + pattern.size(), replace); offset = pos + replace.size(); } return result; }
정답이란 없는법이다.
나에게 맞는 방법 좀더 나은방법이 있다면 그게 좋은것이다
반응형
'⌨ DEVELOPMENT > C++' 카테고리의 다른 글
__cdecl, __stdcall, __fastcall x86 호출 규약(Calling Convention) (4) | 2016.01.01 |
---|---|
[C/C++] FormatMessage 윈도우 GetLastError를 메시지로!! (0) | 2015.12.29 |
[C/C++] IPC - Pipe client simple example (0) | 2015.12.28 |
[C/C++] IPC - Pipe server simple example (1) | 2015.12.21 |
[C/C++] 폴더 전체 경로 중 파일명만 가져오기 (0) | 2015.12.10 |
관리자 권한으로 생성한 MMF User 권한으로 접근하기 (0) | 2015.04.03 |
System Error Codes (0-499) (0) | 2015.03.30 |
C++에서 C#의 Delegate 사용 (0) | 2015.03.22 |
댓글
이 글 공유하기
다른 글
-
[C/C++] IPC - Pipe client simple example
[C/C++] IPC - Pipe client simple example
2015.12.28PIPE Client Server code HOME 2015/12/21 - [Development/C/C++] - [C/C++] IPC - Pipe server simple example 이전에 소개했던 Multithreaded pipe server에 이어 client code 입니다. 모든 server - client program이 그렇듯이 client는 간단 합니다. 하는일은 서버에 접속해서 데이터를 주고 받는게 다 입니다. 바로 코드로 보겠습니다. 생성자에서 서버 정보를 입력받아 바로 접속을 시도하고, 성공 실패여부는 verify 를 통하여 확인 가능하도록 했습니다. 파이프 서버는 생성할때 서버 이름을 입력해주어야 하고, 마찬가지로 클라이언트에서 접속할때도 서버 이름을 입력해야합니다. 이름은 \\… -
[C/C++] IPC - Pipe server simple example
[C/C++] IPC - Pipe server simple example
2015.12.21PIPE Server 프로세스 간 통신(Inter-Process Communication, IPC) 기법 중 하나인 PIPE 통신 입니다. Pipe는 프로세스간에 바이트 스트림을 전송하기 위한 통로의 개념으로 로컬 통신으로 사용하기가 아주 편리한 기법 입니다. (소켓을 이용할수도 있겠지만 로컬 통신에선 포트까지 열어야하는 부담이 있기때문에 비교적 부담이 적은 Pipe를 사용합니다) Pipe는 Named Pipe와 Anonymous Pipe로 나뉘어지며, IPC에선 주로 Named Pipe가 사용됩니다. * Anonymous pipe는 사용성이 불편하고, 비동기 및 양방향 입출력이 지원되지 않는 구식 방식이기 때문입니다. 서버에서 하는 역할을 보겠습니다. [초기화] 1. CreateNamedPipe 를 이… -
[C/C++] 폴더 전체 경로 중 파일명만 가져오기
[C/C++] 폴더 전체 경로 중 파일명만 가져오기
2015.12.10Path 관련해선 MS에서 제공되는 다양한 API가 존재한다. 그 중 파일명을 가져오기위해서 직접 parsing을 해서 사용하다가 API를 찾게되었다. 바로 PathStripPath 라는 API 이다. Removes the path portion of a fully qualified path and file. 즉 전체 경로 중 실제 경로 부분만 제거한다는 의미이다. MSDN의 예제를 보면 TCHAR szPath1[] = TEXT("c:\\dir1\\file.txt"); PathStripPath(szPath1); // Result: szPath1 == file.txt TCHAR szPath2[] = TEXT("c:\\windows\\system32\\directx\\dinput\\joystick.ini")… -
관리자 권한으로 생성한 MMF User 권한으로 접근하기
관리자 권한으로 생성한 MMF User 권한으로 접근하기
2015.04.03서비스스 뿐만 아니라, 시스템이나 관리자 권한으로 생성한 MMF나 혹은 PIPE를 유저 권한으로 읽거나 하려면 반드시라고 해도 좋을 만큼 권한에 관한 문제가 발생합니다. DWORD dwRes; PSID pEveryoneSID = NULL, pAdminSID = NULL; PACL pACL = NULL; PSECURITY_DESCRIPTOR pSD = NULL; EXPLICIT_ACCESS ea; SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY; SECURITY_ATTRIBUTES sa; // Create a well-know…
댓글을 사용할 수 없습니다.