Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 부분 문자열을 다른 문자열로 교체하는 방법


이 글에서는 C++에서 문자열의 일부(부분 문자열)를 다른 문자열로 교체하는 방법을 살펴봅니다. std::string 클래스가 제공하는 replace() 함수를 사용하면, 문자열에서 pos 위치부터 시작하여 len개의 문자에 해당하는 구간을 지정한 새로운 문자열로 손쉽게 대체할 수 있습니다.

replace 함수의 기본 구조

string& replace(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);

주요 매개변수

  • pos: 교체 작업이 시작되는 위치(삽입 지점)입니다.
  • len: 원본 문자열에서 삭제(대체)할 문자의 개수입니다.
  • str: 교체에 사용될 문자열 객체입니다.

이 외에도 replace() 함수는 반복자(iterator), C 스타일 문자열, 문자 반복 등 다양한 오버로드 버전을 제공하므로 상황에 맞게 활용할 수 있습니다.

알고리즘

1단계: 메인 문자열, 교체 대상 문자열, 그리고 매칭 문자열을 입력받는다.
2단계: 매칭 문자열이 메인 문자열에 존재하는 동안 반복한다.
 2.1단계: 해당 부분을 지정된 문자열로 교체한다.
3단계: 수정된 문자열을 반환한다.

예제 코드

#include <iostream>
#include <string>
using namespace std;

int main () {
    string base = "this is a test string.";
    string str2 = "n example";
    string str3 = "sample phrase";
    string str4 = "useful.";
    string str = base;

    // 다양한 형태의 replace 오버로드 사용 예시
    str.replace(9,5,str2);                                    // 위치와 길이, 문자열 객체
    str.replace(19,6,str3,7,6);                               // 문자열 객체의 일부만 사용
    str.replace(8,10,"just a");                               // C 스타일 문자열
    str.replace(8,6,"a shorty",7);                            // C 스타일 문자열의 일부
    str.replace(22,1,3,'!');                                  // 문자 반복
    str.replace(str.begin(),str.end()-3,str3);                // 반복자 범위
    str.replace(str.begin(),str.begin()+6,"replace");
    str.replace(str.begin()+8,str.begin()+14,"is coolness",7);
    str.replace(str.begin()+12,str.end()-4,4,'o');
    str.replace(str.begin()+11,str.end(),str4.begin(),str4.end());

    cout << str << '\n';
    return 0;
}

실행 결과

replace is useful.

정리 및 추가 팁

위 예제처럼 replace() 함수는 인덱스 기반뿐 아니라 반복자 기반으로도 호출할 수 있어 매우 유연합니다. 실무에서는 특정 패턴이 포함된 위치를 먼저 find()로 검색한 뒤, 해당 위치에 replace()를 반복 적용하는 방식으로 "찾아 바꾸기" 기능을 구현하는 경우가 많습니다. 이때 검색 시작 위치를 갱신해 주어야 무한 루프를 방지할 수 있다는 점에 유의하세요.