如何从字符串中删除所有子字符串

Pra*_*ll 7 c++ string substring

如何从字符串中删除模式的所有实例?

string str = "red tuna, blue tuna, black tuna, one tuna";
string pattern = "tuna";
Run Code Online (Sandbox Code Playgroud)

Dea*_*ock 12

从字符串中删除模式的所有实例,

#include <string>
#include <iostream>

using namespace std;

void removeSubstrs(string& s, string& p) { 
  string::size_type n = p.length();
  for (string::size_type i = s.find(p);
      i != string::npos;
      i = s.find(p))
      s.erase(i, n);
}

int main() {

  string str = "red tuna, blue tuna, black tuna, one tuna";
  string pattern = "tuna";

  removeSubstrs(str, pattern);
  cout << str << endl;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_* A. 7

这是一个基本问题,您最好看一下标准库中的字符串功能.

经典解决方案

#include <iostream>
#include <string>

int main() { 
   std::string str = "red tuna, blue tuna, black tuna, one tuna";
   std::string pattern = "tuna";

   std::string::size_type i = str.find(pattern);
   while (i != std::string::npos) {
     str.erase(i, pattern.length());
     i = str.find(pattern, i);
   }

   std::cout << str;
}
Run Code Online (Sandbox Code Playgroud)

Example

RegEx解决方案

从C++ 11开始,你有另一种解决方案(感谢Joachim提醒我这一点)基于正则表达式

#include <iostream>
#include <string>
#include <regex>

int main() { 
   std::string str = "red tuna, blue tuna, black tuna, one tuna";
   std::regex pattern("tuna");

   std::cout << std::regex_replace(str, pattern, "");
}
Run Code Online (Sandbox Code Playgroud)

Example