查找多次出现的字符串

时间:2011-05-09 13:49:07

标签: c++

如何在字符串中找到多次出现的字符串? 在所有出现的情况下用另一个字符串替换找到的字符串? 说,我有以下字符串:

"A cat is going. It is black-white stripped."

我想用are替换所有出现的“is”。

2 个答案:

答案 0 :(得分:3)

您可以使用Boost :: String。 IIRC,他们有一个find_all / replace_all函数来做到这一点。 Detail here

#include <boost/algorithm/string.hpp> 
#include <iostream> 

int main() 
{ 
  std::string s = "A cat is going. It is black-white stripped."; 
  std::cout << boost::algorithm::replace_all_copy(s, "is", "are") << std::endl; 
} 

答案 1 :(得分:0)

string。replace()就是你想要的。看看here。当然,必须多次运行,直到您想要替换的字符串在string::npos上返回find()。试试这个:

int main(int argc, char *argv[]) {

  if(argc != 3) {
    cout << "Usage: <binary> <toFind> <toReplace>" << endl;
    exit(1);
  }

  //string str(argv[1]);
  string str = "A cat is going. It is black-white striped.";
  string dest;
  string toFind(argv[1]);
  string toReplace(argv[2]);

  cout << "Original string = " << str << endl;

  while(str.find(argv[1]) != string::npos) {
    size_t pos = str.find(argv[1]);
    str.replace(pos, toFind.length(), toReplace, 0, toReplace.length());
  }

  cout << "Replaced string = " << str << endl;
  return 0;
}

当然,仍有许多错误检查仍需要纳入此计划。比如说:

  1. str是硬编码的。不好。
  2. 不进行检查以确保要替换的字符串的长度不大于str本身。
  3. HTH,
    斯利拉姆。