【发布时间】:2013-12-22 19:00:02
【问题描述】:
我需要搜索一个字符串并编辑它的格式。
到目前为止,我可以替换第一次出现的字符串,但我无法用该字符串的下一次出现来替换。
这就是我的工作,有点:
if(chartDataString.find("*A") == string::npos){ return;}
else{chartDataString.replace(chartDataString.find("*A"), 3,"[A]\n");}
如果它没有找到字符串,则什么都不会打印,所以这不好。
我知道我需要遍历整个字符串 chartDataString 并替换所有匹配项。我知道有很多类似的帖子,但我不明白(比如这个Replace substring with another substring C++)
我也尝试过这样做来循环字符串:
string toSearch = chartDataString;
string toFind = "*A:";
for (int i = 0; i<toSearch.length() - toFind.length(); i++){
if(toSearch.substr(i, toFind.length()) == toFind){
chartDataString.replace(chartDataString.find(toFind), 3, "[A]\n");
}
}
编辑 考虑到建议,理论上这应该可行,但我不知道为什么不这样做
size_t startPos=0;
string myString = "*A";
while(string::npos != (startPos = chartDataString.find(myString, startPos))){
chartDataString.replace(chartDataString.find(myString, startPos), 3, "*A\n");
startPos = startPos + myString.length();
}
【问题讨论】:
-
使用
std::regex或boost::regex怎么样? -
Boost 有一个
replace_all函数。
标签: c++ string algorithm str-replace