3.7:就上一题完成的程序而言,如果将循环控制变量的类型设为char将会发生什么?先估计一下结果,然后再进行编程验证。
得到的结果与上一程序一样。
3.8:分别使用while循环和传统的for循环重写第一题的程序,你觉得哪种形式更好呢?为什么?
我觉得范围for语句最好,形式上最简便,而且不需要去判断字符串的大小,其次是while语句,相对简便,但是对于本程序来讲,需要知道string类的对象大小,防止出现未定义的结果,最后是传统for循环语句,相对繁琐。
3.9:下面的程序有何作用?它合法吗?如果不合法,为什么?
string s;
cout<<s[0]<<endl;
Ans:不合法。该程序的string类的对象被初始化为空串,使用下标运算符访问对象时,不能访问位置上为空的字符,会出现无法预知的结果。(我在Linux下测试,编译能通过)。
3.11:下面的范围for语句合法吗?如果合法,c的类型是什么?
const string s=" keep out ! ";
for(auto &c:s)
{/*.....*/}
Ans:如果只是访问string对象的值的话,合法,c是绑定到常量的引用。;如果是要修改string对象的值的话不合法。