스트링에서 특정 단어 교체하기


string msg1 = "hello, hello, kk, kkkk, rrrr";

과 같이 있을 때 hello를 bye로 바꾸고 싶습니다 string.replace()는 제가 원하는 기능은 아니더라고요

  • 2016년 01월 08일에 작성됨

조회수 617


1 답변


좋아요
0
싫어요
채택취소하기

1. boost 사용

#include <boost/algorithm/string/replace.hpp>

// 원본 스트링을 바꾸는 경우
std::string in_place = "blah#blah";
boost::replace_all(in_place, "#", "@");

// 원본 스트링을 바꾸지 않고 다른 스트링에 저장하는 경우
const std::string input = "blah#blah";
std::string output = boost::replace_all_copy(input, "#", "@");

2. string::find() 사용

std::string ReplaceAll(std::string &str, const std::string& from, const std::string& to){
    size_t start_pos = 0; //string처음부터 검사
    while((start_pos = str.find(from, start_pos)) != std::string::npos)  //from을 찾을 수 없을 때까지
    {
        str.replace(start_pos, from.length(), to);
        start_pos += to.length(); // 중복검사를 피하고 from.length() > to.length()인 경우를 위해서
    }
    return str;
}

...

std::cout << ReplaceAll(string("Number Of Beans"), std::string(" "), std::string("_")) << std::endl;
std::cout << ReplaceAll(string("ghghjghugtghty"), std::string("gh"), std::string("X")) << std::endl;
std::cout << ReplaceAll(string("ghghjghugtghty"), std::string("gh"), std::string("h")) << std::endl;

결과)

Number_Of_Beans
XXjXugtXty
hhjhugthty

3. 번외 - 철자 하나만 바꾸는 경우 - <algorithm>replace()

#include <algorithm>
#include <string>

int main() {
    std::string s = "example string";
    char from = 'e';
    char to = '!';
    std::replace( s.begin(), s.end(), from, to); // replace all 'x' to 'y'
    std::cout << s << endl;
}

결과)

!xampl! string
  • 2016년 01월 08일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close