如何查找和替换字符串中所有出现的子字符串?
问题内容:
我需要搜索一个字符串并编辑其格式。
到目前为止,我可以替换字符串的第一个匹配项,但是我不能用该字符串的下一个匹配项替换。
这是我正在工作的,有点:
if(chartDataString.find("*A") == string::npos){ return;}
else{chartDataString.replace(chartDataString.find("*A"), 3,"[A]\n");}
如果找不到该字符串,则根本不打印任何内容,所以不好。
我知道我需要遍历整个字符串chartDataString并替换所有出现的内容。我知道有很多与此类似的帖子,但我不明白
我也试图做这样的事情来遍历字符串:
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();
}
问题答案:
尝试以下
const std::string s = "*A";
const std::string t = "*A\n";
std::string::size_type n = 0;
while ( ( n = chartDataString.find( s, n ) ) != std::string::npos )
{
chartDataString.replace( n, s.size(), t );
n += t.size();
}