需求
将字符串中的空格全部进行移除,输出去除空格后的字符
功能实现
1.可以通过string.find()查找空格在的位置;
2.通过string.erase()进行删除
错误代码
#include <iostream>
#include<string>
using namespace std;
int main()
{
string a = "Aabb baw";
int begin = 0;
while (begin = a.find(' ', begin) != string::npos) {
a.erase(begin, 1);
}
cout << a << endl;
return 0;
}
代码部分说明
1.find函数第一个入参为需要在a字符串中查找的数据,第二个入参为开始查找的起始位置;
2.erase函数第一个入参为移除数据的开始位置,第二个入参为移除数据的位数,由于需要移除的数据为空格,即占一位。
运行结果
运行结果分析
1.通过运行结果我们能够看到,这个结果不是我们想要的;
2.通过断点调试,发现如下图
3.此时begin的位置为1,而我们期望的位置应该为4,因为空格在a中的位置为4;
4.通过分析发现运算符!=执行的优先级高于运算符=,因此在执行while条件时,先进行了find()函数,执行完成后与string::npos进行比较,根据比较发现为真,最后将真(1)赋值给begin,导致执行结果不符合预期。
5.解决办法通过括号明确划分优先级。
修改后正确代码
#include <iostream>
#include<string>
using namespace std;
int main()
{
string a = "Aabb baw";
int begin = 0;
while ((begin = a.find(' ', begin)) != string::npos) {
a.erase(begin, 1);
}
cout << a << endl;
return 0;
}
运行结果
结束语
学习我们是认真的,让我们共同成长,共同进步。