cout 输出 string 类型变量的异常,如下:
#include <iostream>
using namespace std;
int main(){
string s, b;
getline(cin, s);
for (int i = 0; s[i]; i ++ ){
// cout << s[i] << s[(i + 1) % s.size()] << endl;
b[i] = s[i] + s[(i + 1) % s.size()];
}
cout << b << endl;
//for (int i = 0; b[i]; i ++ )
// cout << b[i];
return 0;
}
Input : 123
Output :
输出结果显示为空,调试了一下,如果不使用cout 直接输出,而改为:
for (int i = 0; b[i]; i ++ ) cout << b[i];
#include <iostream>
using namespace std;
int main(){
string s, b;
getline(cin, s);
for (int i = 0; s[i]; i ++ ){
// cout << s[i] << s[(i + 1) % s.size()] << endl;
b[i] = s[i] + s[(i + 1) % s.size()];
}
/* 不使用cout输出,改用for循环把string当成字符数组遍历输出*/
for (int i = 0; b[i]; i ++ )
cout << b[i];
return 0;
}
Input : 123
Output : ced
输出的结果就对了。
这是为什么呢?一开始以为是s[i]有问题,就去看了一下,发现没有问题,后来输出了一下b.size()的值,发现为0. 随后去问了一下别人:
string b这句话向系统申请了一部分内存给b,但是初始化后的b.size() 为 0.而我这么写给b赋值,确实改变了b里面的值,但是因为b.size()一直等于0,我没有修改过,所以cout << b << endl;的结果才一直是一片空白。知道原因后修改了一下代码,如下:
#include <iostream>
using namespace std;
int main(){
string s, b;
getline(cin, s);
for (int i = 0; s[i]; i ++ ){
// cout << s[i] << s[(i + 1) % s.size()] << endl;
b = b + (char)(s[i] + s[(i + 1) % s.size()]);
}
cout << b << endl;
return 0;
}
Input : 123
Output : ced
1264

被折叠的 条评论
为什么被折叠?



