我需要搜索一个字符串并编辑它的格式.
到目前为止,我可以替换第一次出现的字符串,但是我无法在下一次出现此字符串时这样做.
这就是我的工作,有点像:
if(chartDataString.find("*A") == string::npos){ return;} else{chartDataString.replace(chartDataString.find("*A"), 3,"[A]\n");}
如果找不到字符串,则根本不打印任何内容,因此不好.
我知道我需要遍历整个字符串chartDataString并替换所有出现的事件.我知道有很多类似的帖子,但我不明白(像这样用另一个子串C++替换子串)
我也尝试过这样的事情来循环遍历字符串:
string toSearch = chartDataString; string toFind = "*A:"; for (int i = 0; i编辑考虑到建议,这在理论上应该有效,但我不知道为什么不这样做
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(); }
Vlad from Mo.. 22
尝试以下方法
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(); }
Guy Avraham.. 6
如果
boost
可用,您可以使用以下内容:std::string origStr = "this string has *A and then another *A"; std::string subStringToRemove = "*A"; std::string subStringToReplace = "[A]"; boost::replace_all(origStr , subStringToRemove , subStringToReplace);要对原始字符串执行修改,请执行
std::string result = boost::replace_all_copy(origStr , subStringToRemove , subStringToReplace);在不修改原始字符串的情况下执行修改.
尝试以下方法
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(); }
如果boost
可用,您可以使用以下内容:
std::string origStr = "this string has *A and then another *A"; std::string subStringToRemove = "*A"; std::string subStringToReplace = "[A]"; boost::replace_all(origStr , subStringToRemove , subStringToReplace);
要对原始字符串执行修改,请执行
std::string result = boost::replace_all_copy(origStr , subStringToRemove , subStringToReplace);
在不修改原始字符串的情况下执行修改.