一道练习题:编写一段程序,使用范围for语句将字符串内所有字符用X代替
编写如下代码
string s,v;
cin>>s;
cout<<"the current string is: "<<s<<endl;
for(string::size_type n=0;n<=s.size();++n)
s[n]='X';
cout<<"The change string is: "<<s<<endl;
return 0;
运行后出现X后有中文“屯屯屯屯 屯屯屯屯屯”一串出现,不知道怎么回事,于是尝试修改代码如下
string s,v;
cin>>s;
cout<<"the current string is: "<<s<<endl;
for(string::size_type n=0;n<=s.size();++n)
v+='X';
cout<<"The change string is: "<<v<<endl;
return 0;
发现结果显示正确。
问题解决了,第一次的代码当
n<=s.size()
时s的最后一位也就是结尾标识符’\0'也被修改为‘X’,所以所得结果‘X’多一位,至于后面的中文想必也是出现了乱码所致(原理不知道)。
所以将第一次的代码<=修改为!=或者<即可正确输出。
(使用范围for语句编译出现missing ',' before ':',我用的是VC++6.0,根本就不认识)