이 영역을 누르면 첫 페이지로 이동
웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

페이지 맨 위로 올라가기

웬디의 기묘한 이야기

C/C++ Windows Hooking 개발자의 블로그 입니다! 이곳은 개발 외에도 저의 취미들이 공유되는 기묘한 이야기가 펼쳐집니다.

[C/C++] string replace all 문자열 모두 치환

  • 2015.12.11 12:24
  • ⌨ DEVELOPMENT/C++
반응형


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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C/C++] IPC - Pipe client simple example

    [C/C++] IPC - Pipe client simple example

    2015.12.28
  • [C/C++] IPC - Pipe server simple example

    [C/C++] IPC - Pipe server simple example

    2015.12.21
  • [C/C++] 폴더 전체 경로 중 파일명만 가져오기

    [C/C++] 폴더 전체 경로 중 파일명만 가져오기

    2015.12.10
  • 관리자 권한으로 생성한 MMF User 권한으로 접근하기

    관리자 권한으로 생성한 MMF User 권한으로 접근하기

    2015.04.03
다른 글 더 둘러보기

정보

웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

  • 웬디의 기묘한 이야기의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 이야기

카테고리

  • 분류 전체보기 (204)
    • MY STORY (2)
    • 📸 WALKING WITH YOU (85)
      • 아이슬란드 신혼여행 이야기 (14)
      • 대한민국 구석구석 (62)
      • CONTAX N1 + T* 28-80mm (4)
      • SAMSUNG NX3000 (1)
      • 어느 멋진 날 (4)
    • ⌨ DEVELOPMENT (80)
      • BOOK:Review (1)
      • AI (13)
      • C++ (26)
      • Python (10)
      • WIndows Hooking (9)
      • Windows Kernel (3)
      • Design Pattern (3)
      • Debugging (9)
      • Tools (0)
      • Project (1)
      • Android (1)
      • 상업용 무료폰트 (4)
    • OS (4)
      • News (0)
      • Windows 일반 (4)
    • 모바일 (2)
      • 모바일 게임 (2)
    • 멘사 퍼즐 (9)
    • 생활 꿀 TIP (7)
      • 건강 (3)
      • 일상 (2)
    • 물생활 (8)
      • 골든볼 라미네지 롱핀 (8)
    • IT 기기 (2)
    • BLOG (4)
      • TISTORY BLOG TIP (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 카페
  • 신혼여행
  • 해외여행
  • 아이슬란드
  • c
  • AI
  • windbg
  • c++

나의 외부 링크

  • kernel undocument api
  • 지구 관찰자의 일기
  • 지구와 지구곰

정보

WENDYS의 웬디의 기묘한 이야기

웬디의 기묘한 이야기

WENDYS

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © WENDYS. Designed by Fraccino.

티스토리툴바