为什么我有一个换行符?
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'
。
代码有问题。在内存位置显示错误 "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'
。