小编典典

如何查找和替换字符串中所有出现的子字符串?

algorithm

我需要搜索一个字符串并编辑其格式。

到目前为止,我可以替换字符串的第一个匹配项,但是我不能用该字符串的下一个匹配项替换。

这是我正在工作的,有点:

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();
}

阅读 239

收藏
2020-07-28

共1个答案

小编典典

尝试以下

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();
}
2020-07-28