如何删除字符串中的字符?

时间:2015-08-02 06:23:23

标签: c++ loops for-loop

我正在尝试编写一个程序帽,在Pineapple中删除字符'p'以输出单词Pineale。这是我目前的代码。我发现了类似的问题,并认为这段代码可行,但不幸的是。任何帮助表示赞赏!

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    #include <limits>
    using namespace std;

    int main(){
        remove(c,s);
    }
    string remove(char c, const string & s){
    string s = "Pineapple";
    char chars[] = "p";
    for (unsigned int i = 0; i < strlen(chars); ++i)
     {
        s.erase(remove(s.begin(), s.end(), chars[i]), s.end());
     }

     cout << s << endl;
     return s;
    }

3 个答案:

答案 0 :(得分:3)

首先,您没有定义任何c或s变量。 其次,remove函数中的参数是const,这意味着s是不可更改的。 以下代码适用于我的VS2013。

#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <limits>

using namespace std;

string remove(char* charToRemove, string &str){
    //string s = "Pineapple";
    //char chars[] = "p";
    for (unsigned int i = 0; i < strlen(charToRemove); ++i)
    {
        str.erase(remove(str.begin(), str.end(), charToRemove[i]), str.end());
    }

    cout << str << endl;
    return str;
}

int _tmain(int argc, _TCHAR* argv[])
{
    string str("Pineapple");

    char chars[] = "p";
    remove(chars, str);

    int i;
    cin >>i;
}

答案 1 :(得分:2)

只需使用string::find()'p'获取第一个"Pineapple"的位置,然后使用string::erase()。无需将string::erase()放入循环中。

string remove(char to_rem, string s) {
    size_t pos = s.find( to_rem );
    s.erase(pos, count(s.begin(), s.end(), to_rem) );
    return s;
}

修改后的代码:

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

string remove(char to_rem, string s) {
    size_t pos = s.find( to_rem );
    s.erase(pos, count(s.begin(), s.end(), to_rem) );
    return s;
}

int main() {
    cout << remove('p', "Pineapple");
}  

输出:

Pineale

答案 2 :(得分:0)

试试这个:

  struct slash_pred
    {
      char last_char;

      slash_pred()
       : last_char( '\0' ) // or whatever as long as it's not '/'
      {
      }

      bool operator()(char ch)
      {
          bool remove = (ch == '/') && (last_char == '/');
          last_char = ch;
      }
    };

    path.erase( std::remove_if( path.begin(), path.end(), 
          slash_pred() ), path.end() );