티스토리 뷰

Programming/C++

C++용 replace all

ljh131 2008.03.29 14:18
C++ STL의 string을 이용해서 구현한 replace all 함수입니다.

마지막 두줄의 assert를 보면 알 수 있듯이, 이 함수엔 문자열이 재귀적으로 치환되는 문제가 없습니다.

#include 
#include 
#include 

using namespace std;

string replaceAll(const string &str, const string &pattern, const string &replace)
{
	string result = str;
	string::size_type pos = 0;
	string::size_type offset = 0;

	while((pos = result.find(pattern, offset)) != string::npos)
	{
		result.replace(result.begin() + pos, result.begin() + pos + pattern.size(), replace);
		offset = pos + replace.size();
	}

	return result;
}

int main()
{
	assert(replaceAll("abcdefg", "bc", "de") == "adedefg");
	assert(replaceAll("abc\nabc\nabc", "\n", "") == "abcabcabc");
	assert(replaceAll("aaabbbaaa", "aaa", "1") == "1bbb1");
	assert(replaceAll("ababab ababab", "ab", "1") == "111 111");
	assert(replaceAll("abcdefg", "gf", "de") == "abcdefg");
	assert(replaceAll("aaa", "a", "aa") == "aaaaaa");
	assert(replaceAll("11aa11aa", "1", "11") == "1111aa1111aa");

	return 0;
}
댓글
댓글쓰기 폼