프로그램 :이 프로그램UTF8 문자열에 대해 C++ 문자열 지우기가 작동하지 않습니다. 어떤 라이브러리를 사용할 수 있습니까?
void foo() {
string sourceStr = "Tag:贾鑫@VoltDB";
string insertStr = "XinJia";
int start = 4;
int length = 2;
sourceStr.erase(start, length);
sourceStr.insert(start, insertStr);
cout << sourceStr << endl;
}
, 나는 같은 출력 싶어 "태그 : XinJia의 @의 VoltDB를",하지만 표준 문자열 삭제 및 삽입 UTF-8 문자열을 작동하지 않는 것 같다.
사용할 수있는 부스트 라이브러리가 있습니까? 이 문제를 어떻게 해결해야합니까?
다른 사람들과 이야기 한 후이 문제를 해결할 수있는 표준 라이브러리가 없다는 것을 알고 있습니다. 그래서 난 내 일을 할 수있는 기능을 작성하고이 비슷한 문제가 다른 사람과 공유하고 싶은이 funciton와
std::string overlay_function(const char* sourceStr, size_t sourceLength,
std::string insertStr, size_t startPos, size_t length) {
int32_t i = 0, j = 0;
while (i < sourceLength) {
if ((sourceStr[i] & 0xc0) != 0x80) {
if (++j == startPos) break;
}
i++;
}
std::string result = std::string(sourceStr, i);
result.append(insertStr);
bool reached = false;
j = 0;
while (i < sourceLength) {
if ((sourceStr[i] & 0xc0) != 0x80) {
if (reached) break;
if (++j == length) reached = true;
}
i++;
}
result.append(std::string(&sourceStr[i], sourceLength - i));
return result;
}
을, 내 프로그램은 다음과 같습니다
cout << overlay_function(sourceStr, sourceStr.length(), 4+1, 2) << endl;
는 도움이되기를 바랍니다.
이 질문을 읽는 것이 좋습니다. http://stackoverflow.com/q/3011082/10077 답변 중 일부는 라이브러리 제안을 포함합니다. –
"표준 라이브러리에는 UTF-8 인식 이터레이터가 없습니다." 고마워, 그게 내가 알아야 할거야. 그렇다면 UTF8 문자열 인덱스를 처리하는 자체 함수를 작성해야합니다. – xin
나는 그러한 반복자를 구현하는 블로그 게시물을 찾았습니다. http://www.nubaria.com/en/blog/?p=371 –