이 글에서는 C++에서 문자열의 일부를 다른 문자열로 교체하는 방법을 알아봅니다. C++에서는 string.replace() 함수를 사용하면 문자열 교체 작업을 아주 간단하게 처리할 수 있습니다.
다만 주의할 점은 replace() 함수가 일치하는 첫 번째 항목만 교체한다는 것입니다. 따라서 문자열 내의 모든 일치 항목을 교체하려면 반복문과 함께 사용해야 합니다. 이 함수는 세 가지 인자를 받습니다.
- 시작 인덱스: 교체를 시작할 위치
- 길이: 교체 대상 문자열의 길이
- 새 문자열: 기존 문자열 대신 삽입할 문자열
입력 및 출력 예시
입력: 문자열 "Hello...Here all Hello will be replaced", 교체할 문자열 "ABCDE" 출력: "ABCDE...Here all ABCDE will be replaced"
알고리즘
1단계: 원본 문자열, 교체에 사용할 문자열, 그리고 찾을 문자열을 준비합니다. 2단계: 찾을 문자열이 원본 문자열에 존재하는 동안 반복합니다. 2.1단계: 발견된 위치의 문자열을 지정한 문자열로 교체합니다. 3단계: 최종적으로 수정된 문자열을 반환합니다.
예제 코드
#include<iostream>
using namespace std;
main() {
int index;
string my_str = "Hello...Here all Hello will be replaced";
string sub_str = "ABCDE";
cout << "Initial String :" << my_str << endl;
//모든 Hello를 ABCDE로 교체
while((index = my_str.find("Hello")) != string::npos) { //Hello가 발견되는 각 위치마다 반복
my_str.replace(index, sub_str.length(), sub_str); //해당 위치부터 기존 문자열을 제거하고 새 문자열로 교체
}
cout << "Final String :" << my_str;
}코드 설명
위 코드의 핵심은 find()와 replace() 함수의 조합입니다. find("Hello")는 문자열에서 "Hello"가 처음 나타나는 위치를 반환하며, 더 이상 찾지 못하면 string::npos를 반환합니다. 따라서 while 루프의 조건식은 "Hello"가 존재하는 한 계속 반복되도록 작성되었습니다.
루프 내부에서는 find()가 반환한 인덱스 위치부터 sub_str.length()(5글자)만큼 잘라내고, 그 자리에 sub_str인 "ABCDE"를 삽입합니다. 이 과정이 반복되면 문자열에 남아 있는 모든 "Hello"가 순차적으로 "ABCDE"로 바뀌게 됩니다.
실행 결과
Initial String :Hello...Here all Hello will be replaced Final String :ABCDE...Here all ABCDE will be replaced