1

我创建了一个替换字符串的函数。

它看起来像这样:

void replace_with(wstring& src, const wstring& what, const wstring& with)
{    
    if (what != with) {
        wstring temp;
        wstring::size_type prev_pos = 0, pos = src.find(what, 0);
        while ( wstring::npos != pos ) {
            temp += wstring(src.begin() + prev_pos, src.begin() + pos) + with;
            prev_pos = pos + what.size();
            pos = src.find(what, prev_pos);
        }
        if ( !temp.empty() ) {
            src = temp + wstring(src.begin() + prev_pos, src.end());
            if (wstring::npos == with.find(what)) {
                replace_with(src, what, with);
            }
        }
    }
}

但是,如果我的字符串是 size==1,而“what”正是字符串,它不会替换它。

例如

wstring sThis=L"-";
replace_with(sThis,L"-",L"");

...不会替换“-”。

我看不出我哪里出错了。

有人可以帮忙吗?

4

2 回答 2

2
void replace_with(wstring &src, wstring &what, wstring &with) {
    for (size_t index = 0; ( index = src.find(what, index) ) != wstring::npos ; ) {
        src.replace(index, what.length(), with);
        index += with.length();
    }       
}
于 2013-05-28T10:47:17.287 回答
1

该功能的主要部分工作正常。问题是 if (!temp.empty()) 部分,这绝对没有意义。仅用该行替换整个 if 块

src = temp + wstring(src.begin() + prev_pos, src.end());

它应该可以正常工作。

提示:尝试用语言解释函数的最后一部分在做什么。

于 2013-05-28T10:40:41.700 回答