How to remove all substrings from a string

前端 未结 4 868
终归单人心
终归单人心 2020-12-01 23:56

How to remove all instances of the pattern from a string?

string str = \"red tuna, blue tuna, black tuna, one tuna\";
string pattern = \"tuna\";
相关标签:
4条回答
  • 2020-12-02 00:47

    Try something like:

    void replaceAll(std::string& str, const std::string& from, const std::string& to) {
        if(from.empty())
            return;
        size_t start_pos = 0;
        while((start_pos = str.find(from, start_pos)) != std::string::npos) {
            str.replace(start_pos, from.length(), to);
            start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'
        }
    }
    

    From Replace part of a string with another string

    0 讨论(0)
  • 2020-12-02 00:48

    Removes all instances of the pattern from a string,

    #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;
    }
    
    0 讨论(0)
  • 2020-12-02 00:48

    This is a basic question and you'd better take a look at the string capabilities in the standard library.

    Classic solution

    #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;
    }
    

    Example

    RegEx solution

    Since C++11 you have another solution (thanks Joachim for reminding me of this) based on regular expressions

    #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, "");
    }
    

    Example

    0 讨论(0)
  • 2020-12-02 00:52

    This is the basic logic for better understanding Here is the code in c++

        string s,x;                //s is the string , x is the substring
        int a,l; 
        cin>>s>>x;
        l=x.length();
        while(true)
        {
            a=s.find(x);
            if(a==-1)
            {break;}                       // if substring is not found
            else
            {
            s.erase(a,l);                  //if substring is found 
            }
        }
        if(s.length()==0)                  // if string length becomes null printing 0 
            cout<<0<<"\n";      
        else 
            cout<<s<<endl;                 // else printing the string
    

    example: input-shahaha output-shha

    0 讨论(0)
提交回复
热议问题