如何从c ++中的字符串中删除字符?

时间:2016-12-25 23:52:08

标签: c++ string

我需要帮助调试我的代码。我尝试了很多东西,但我似乎无法从字符串中删除字符。

我也完全不了解std :: erase是如何工作的,我不确定你是否可以用它擦除字符。

#include <iostream>
#include <string>

using namespace std;
int main(){

    string s;
    char n;
    cin >> s;
    cin >> n;

    for (int i = 0;i < s.length(); i++) {
        s.erase (n[i]);
    }

    cout << s;

    return 0;

}

编辑:很抱歉这么模糊。我认识到我试图从数组而不是预期的字符串中删除某些内容的问题。在张贴的答案的帮助下;更新的代码附在下面,按照我想要的方式工作。感谢您的回复!

#include <iostream>
#include <string>

using namespace std;
int main(){

string s;
char n;
cin >> s;
cin >> n;

for (int i = 0; i < s.length(); i++) {
    while (s[i] == n) {
      s.erase(i, i);
    }
}

cout << s;

return 0;

}

3 个答案:

答案 0 :(得分:3)

使用erase-remove idiom

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

int main() {

    std::string s = "Hello World!";
    s.erase(std::remove(s.begin(), s.end(), 'l', s.end());
    std::cout << s << std::endl;
    return 0;
}

分为两个陈述:

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

int main() {

    std::string s = "Hello World!";
    auto it = std::remove(s.begin(), s.end(), 'l');
    s.erase(it, s.end());
    std::cout << s << std::endl;
    return 0;
}

答案 1 :(得分:1)

如果您只想从字符串中删除一个字符,可以使用其方法find来查找字符串中的字符。例如

auto pos = s.find( n );
if ( pos != std::string::npos ) s.erase( pos, 1 );

或者您可以通过以下方式使用循环

std::string::size_type pos = 0;

while ( pos < s.size() && s[pos] != n ) ++pos;

if ( pos != s.size() ) s.erase( pos, 1 );

如果要使用循环擦除字符串中出现的所有字符,可以编写

for ( std::string::size_type pos = 0; pos < s.size(); )
{
    if ( s[pos] == n ) s.erase( pos, 1 );
    else ++pos;
} 

答案 2 :(得分:0)

如果您对正在尝试的内容进行了正确的描述,将会很有帮助。问题有点模糊,但我认为你试图从一个字符串中删除一个给定的字符,如果这是你想要做的,这是一个建立在你已经提供的基础上的工作示例。

#include <iostream>
#include <string>

using namespace std;
int main(){

    string s;
    char n ;

    cin >> s;
    cin >> n;
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == n) {

          s.erase(i, 1);

        }           
    }

    cout << s;

    return 0;

}