有没有人能帮我看看为什么这段代码只能部分通过编译,看了半天没看出毛病

问题遇到的现象和发生背景

从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。

输入格式:
第一行是一个字符串,不超过100个字符;
第二行是一个字符。

输出格式:
删除指定字符后的字符串。

输入样例:
在这里给出一组输入。例如:

sdf$$$sdf$$
$

输出样例:
在这里给出相应的输出。例如:

sdfsdf

代码如下
#include<iostream>
#include<string>
using namespace std;

int main() {
    string str;
    char c;
    cin >> str >> c;
    for (unsigned i = 0; i < str.length(); i++) {
        if (str[i] != c) {
            cout<<str[i];
        }
    }
    return 0;
}


运行结果及报错内容

部分通过编译


int main()
{
    char str[100];
    char c;
    cin.getline(str, 100); //可接收空格
    cin >> c;

    for (size_t i = 0; str[i]; i++)
    {
        if (str[i] != c)
        {
            cout << str[i];
        }
    }
    return 0;
}

你这样的操作并没有符合你自己的要求啊!你只是没有打印字符c,却并没有删除掉那个字符

正确的应该这么写

int main()
{
    string s1;
    char c;
    cin >> s1;
    cin >> c;

    string::iterator it = s1.begin();
    while (it != s1.end())
    {
        if (*it == c) {
            s1.erase(it);
        }
        it++;
    }

    cout << s1 << endl;
    return 0;
}

结果如下

img