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

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

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

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
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.