《C++ Primer》第五版课后习题解答_第三章(2)(06-20)

来源:互联网 发布:平板推荐 知乎 编辑:程序博客网 时间:2024/06/08 06:35

系统环境: windows 10 1703

编译环境:Visual studio 2017


3.6

#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;int main(){    string s;    cout << "Enter one string: " << endl;    getline(cin, s);    for (auto &c : s)    {        c = 'x';    }    cout << s << endl;    return 0;}
最开始程序出现了问题,报错在15行。查询后发现,原因在于,当时的赋值语句右侧写成了「“x”」,此时 x 是字符串,将字符串赋给字符变量 c,就出现了错误。把双引号改为单引号后,正确编译。


3.7

将循环控制变量改为 char,编译运行结果保持不变。验证后发现确实不变。


3.8

#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;// 传统 for 循环int main(){    string s;    cout << "Enter one string: " << endl;    getline(cin, s);    for (string::size_type i = 0; i < s.size(); ++i)    {        s[i] = 'x';    }    cout << s << endl;    return 0;}
#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;// while 循环int main(){    string s;    cout << "Enter one string: " << endl;    getline(cin, s);    string::size_type i = 0;    while ( i < s.size())    {        s[i] = 'x';        ++i;    }    cout << s << endl;    return 0;}
范围 for 语句最简便,可以直接循环 string 内的每一个字符,而不需要为下标单独声明一个变量。


3.9

合法,输出字符串 s 的第一个字符。

(英文原版文字为 Is it valid? If not, why not?  没有查到在 C++ 中 valid 和 legal 的区别。)


3.10

#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;int main(){    string s;    getline(cin, s);    string result;    for (string::size_type i = 0; i< s.size(); ++i)    {        if (!ispunct(s[i]))        {            result += s[i];        }    }    cout << result << endl;    return 0;}

3.11

c 的类型是 const char&

合法与否取决于循环体内的语句,如果不改变 c 的值则合法,否则不合法。


3.12

(a) 正确,ivec 的元素是 vector 对象;

(b) 错误,对象类型不同;

(c) 正确,svec 内有十个元素,均为 null;


3.13

(a) 空 (b) 10个 (c) 10个 (d) 1个 (e) 2个 (f) 10个 (g) 10个


3.14

#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){    int i;    vector<int> ivec;    while (cin >> i)    {        ivec.push_back(i);    }    for (int i = 0; i <= (ivec.size() - 1); ++i)    {        cout << ivec[i] << endl;    }    return 0;}

3.15

#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){    string s;    vector<string> svec;    while (cin >> s)    {        svec.push_back(s);    }    for (int i = 0; i <= (svec.size() - 1); ++i)    {        cout << svec[i] << endl;    }    return 0;}

3.16

3.13 回答正确


3.17

#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){    vector<string> svec;    vector<string> result;    string s;    while (cin >> s)    {        svec.push_back(s);    }    for (auto &a : svec)    {        for (auto &b : a)        {            b = toupper(b);        }    }    for (auto &c : svec)    {        cout << c << endl;    }    return 0;}

3.18

不合法,ivec 中不存在任何元素,所以无法用下标访问。

可将 ivec 定义为:vector<int> ivec(10);


3.19

#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){    vector<int> ivec1(10, 42); //这个方法更好。对于元素个数已知,并且所有元素相同的 vector,直接赋值的方法更快捷    vector<int> ivec2{ 42, 42, 42, 42, 42, 42, 42 ,42 ,42 ,42 };    vector<int> ivec3;    for (int i = 0; i <= 9; ++i)    {        ivec3.push_back(42);    }    return 0;}

3.20

#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;// 相邻整数的和int main(){    vector<int> ivec;    int i;    int sum;    while (cin >> i)    {        ivec.push_back(i);//构建 vector    }    for (auto &a : ivec)    {        cout << a << endl;    }    for (vector<int>::size_type j = 0; j <= (ivec.size() - 2); ++j) // 从第一个数开始,求其和后一个数之和。所以j 取倒数第二个数的下标    {        cout << ivec[j] + ivec[j + 1] << endl;    }    return 0;}
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;// 两侧至中的和int main(){    vector<int> ivec;    int i;    int sum;    while (cin >> i)    {        ivec.push_back(i);    }    for (auto &a : ivec)    {        cout << a << endl;    }    for (vector<int>::size_type j = 0; j <= (ivec.size() - 1); ++j) // 从最左侧的数开始取,和相应的数相加    {        if (j < (ivec.size() - 1 - j)) //如果出现大于的情况,则表示取值越过了中线        {            cout << ivec[j] + ivec[(ivec.size() - 1 - j)] << endl;        }        else if (j == ((ivec.size() - 1 - j))) //如果相等,则表示取到了中间数        {            cout << "This is the middle number: " << ivec[j] << endl;        }    }    return 0;}

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车辆年审超时间怎么办 车辆过年检了怎么办 开公司货车违章怎么办 毕业证丢了怎么办居住证 贴吧回帖被秒删怎么办 群拉人失败了怎么办 安装解释包错误怎么办 皮皮麻将进不去怎么办 郑州集体户口怎么办准生证 广州集体户口准生证怎么办 学校寄档案丢失怎么办 深圳通儿童卡怎么办 集体户没有户口卡怎么办 北京滴滴跑长途怎么办 应届毕业生落户成都档案怎么办 执业医师缺考怎么办 国家级考试缺考怎么办 异地就业后档案怎么办 没有工作报到证怎么办 网络系统管理员封锁网络怎么办 公房没买断产权怎么办 去异地工作社保怎么办 深圳辞职了 社保怎么办 小产权孩子上学怎么办 多余的粽叶怎么办 农村两处宅基地怎么办 农村一户多宅怎么办 无锡未满五年安置房怎么办 人才公寓退休后怎么办 套餐到期不用了怎么办 日本手机自动续约怎么办 如果购房后退房怎么办 土地权70年到期怎么办 在亚庇丢了护照怎么办 回国丢了护照怎么办 大学挂科拿不到毕业证怎么办 孩子脸上长黑痣怎么办 婴儿tsh10.6偏高怎么办 苹果x显示edge怎么办 煮的鸡肉腥怎么办 卫生间蹲坑太高怎么办