2020년 11월 1일 일요일

std::string replace all

 std::string 을 처음으로 접해보지 않은 저로서는 그냥 쓰다 보면
다른 FrameWork에서는 그냥 제공하는 함수도 없다는 점이 불편하네요.
물론 최신 라이브러리에서 제공은 하는지는 모르지만 가끔은 이전 버젼에서 작업을 해야 되서​

문자열 전체에서 특정 문자를 변경해야 하는 작업입니다.
일단 소스를 보시죠~


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
void ReplaceStdString(std::string& sOrg, const char* szOld, const char* szNew)
{
	std::string::size_type nPos = 0;
	std::string::size_type nOffset = 0;

	std::string sPattern = szOld;
	std::string sReplace = szNew;

	while ((nPos = sOrg.find(sPattern, nOffset)) != std::string::npos)
	{
		sOrg.replace(sOrg.begin() + nPos, sOrg.begin() + nPos + sPattern.size(), sReplace);
		nOffset = nPos + sReplace.size();
	}
}

<위 코드는 Visual Studio 2008  Window 10 64bit 환경에서 빌드 되었습니다 >


위 소스를 보시면 sOrg라는 변수에 전체 문자열이 들어오고 szOld는 변경할 문자
szNew는 변경 되어야할 문자를 입력 받습니다.
전체 문자열을 뒤지면서 하나씩 찾아 변경하는 로직입니다.

std::string 에서 제공하는 replace 는 시작 index와 끝 index를 찾아 변경될 문자열을 찾아 변경하는 함수 입니다.


그럼 ^^