我需要搜索一个字符串并编辑其格式。
到目前为止,我可以替换字符串的第一个匹配项,但是我不能用该字符串的下一个匹配项替换。
这是我正在工作的,有点:
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(); }