为什么我有一个换行符?

Why do I have a line break?

代码有问题。在内存位置显示错误 "std::out_of_range"。在调试期间。 代码的任务是找出文本中所有的字母“A”,并将其删除。 **С++代码: **

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string a;
    getline(cin, a);
    int n = 0;
    do {
        n = a.find('a',1);
        cout << n;
        a.erase(n, 0);
        cout << a;
    } while (n != -1);
    cout << a;
}

我尝试将 int 更改为 double,但程序无法正常运行。但是,错误消失了

这个 do-while 循环有两个问题

do {
    n = a.find('a',1);
    cout << n;
    a.erase(n, 0);
    cout << a;
} while (n != -1);

第一个是你从位置1开始搜索字母'a'而不是位置0。

第二个是,如果未找到字母 'a',则 n 等于 std::string::npos,您将在 erase 调用中使用此值。在调用成员函数erase.

之前需要检查n不等于std::string::npos

而且无论如何调用erase都是不正确的。

最好使用 for 循环而不是 do-while 循环。例如

for ( std::string::size_type n; ( n = a.find( 'a' ) ) != std::string::npos; )
{ 
    std::cout << n;
    a.erase(n, 1 );
    std::cout << a << '\n';
}

您还应该将变量 n 声明为 std::string::size_type.

类型

正如 @Ted Lyngmo 在评论中所写,如果您的编译器支持 C++ 20,那么您可以使用为标准容器定义的标准 C++ 函数 erase,例如

std::erase( a, 'a' );

删除字符串中所有出现的字母 'a'