最近在看C++primer,3.2 标准库类型string有一个习题,写一个程序将输入的字符串中的符号删除后输出。我新建了一个字符串接收非符号的字符串,但是最后输出结尾部分总是多一个a。
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main(){
string dd,dd2;
cin >> dd;
decltype(dd.size()) num = 0;
while (num <= dd.size()){
if (ispunct(dd[num])==0){
dd2 += dd[num];
}
num++;
}
cout <<dd2 << endl;
return 0;
}
如图,在断点调试中看这个字符串内容为hibro,而输出为hibroa
————————
再检查了一次代码,发现循环的条件竟然写的是<=,看.size()的定义,应该将=去掉才对。将=去掉后,字符串输出正常。
但是为什么a[a.size()+1]能够正常输出,而且输出的恰巧为a?
于是我尝试了直接输出一个默认初始化的string类,输出的结果是a!
在上面的程序中未进入循环的地方加入一个判断,
if (dd2[0] == '\0'){
cout << "there have a \0" << endl;
}
发现输出了这句话,那么是不是可以说,在string容器里也是以\0结尾?