zoukankan      html  css  js  c++  java
  • 《C++Primer》第五版习题答案--第三章【学习笔记】

    【C++Primer】第五版【学习笔记】习题解答第三章

    ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考。
    作者:cosefy
    Date: 2020/1/10

    第三章:字符串,向量和数组

    练习3.2:

    #include<iostream>
    #include<string>
    using std::string;
    using std::cout;
    using std::cin;
    using std::endl;
    int main() 
    {
    	string line;
    	//while (cin >> line)     //每次输入一个词
        while (getline(cin,line))	//每次输入一行  	
    		if (!line.empty()) 
    			cout << line << endl;
    	return 0;
    }
    

    练习3.3:

    string的输入从字符开始,直到遇到空白停止;而getline遇到空白不停止,遇到回车停止。

    练习3.4:
    实现:比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main() 
    {
    	string l1, l2;
    	cin >> l1 >> l2;
    	if (l1 == l2)
    		cout << "字符串相等" << endl;
    	else
    		if (l1.size() > l2.size())
    			cout << l1 << endl;
    		else if(l1.size() < l2.size())
    			cout << l2 << endl;
    		else
    			cout << "长度相等" << endl;
    	return 0;
    }
    

    练习3.5:

    int main() 
    {
    	string l1, l2;
    	while (cin >> l2)
    		l1 = l1 + l2 + " ";
    	cout << l1 << endl;
    	return 0;
    }
    

    练习3.6:
    实现:使用for语句,将字符串内的所有字符用X代替.

    #include<iostream>
    #include<string>
    #include<ctype.h>
    
    using namespace std;
    
    int main() 
    {
    	string s;
    	getline(cin,s);
    	for (auto &c : s)
    		if (isalpha(c))
    			c = 'X';
    	cout << s << endl;
    	return 0;
    }
    

    练习3.8:
    for循环更好,形式更加简洁。

    练习3.9:

    不合法,因为字符串s没有初始化,直接访问第一个字符会发生未知错误。

    练习3.10:
    实现:读入一行含标点符号的字符串,将标点符号删除后输出剩余部分

    #include<iostream>
    #include<string>
    #include<ctype.h>
    
    using namespace std;
    
    int main() 
    {
    	string s,s1;
    	getline(cin, s);
    	for (auto& c : s)
    		if (!ispunct(c))
    			s1 = s1 + c;
    	cout << s1<<endl;
    	return 0;
    }
    

    练习3.12:

    • a正确
    • b错误,sevc是string类型,ivec是int型,类型不匹配。
    • c错误,应该用花括号来处理。

    练习3.13:

    • v1:一个元素,空值
    • v2:10个元素都为0
    • v3:10个元素都为42
    • v4:一个元素,值为10
    • v5:两个元素,分别为10,42
    • v6:10个元素,都为空字符串
    • v7:10个元素,都为"hi"

    练习3.14:
    实现:用cin读入一组整数,并把它们存入一个vector对象

    #include<iostream>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    int main() 
    {
    	vector<int> invc;
    	int a;
    	while (cin >> a)
    		invc.push_back(a);
    	return 0;
    }
    

    练习3.17:
    实现:cin读入一组词,把它们存入一个vector对象,然后设法把所有词改为大写形式,每个词占一行。

    #include<iostream>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    int main() 
    {
    	vector<string> vctr;
    	string s;
    	decltype(vctr.size()) index = 0;
    	while (cin >> s)
    	{
    		for (auto& c : s)
    			c = toupper(c);
    		vctr.push_back(s);
    		cout << vctr[index] << endl;
    		index += 1;
    	}
    	return 0;
    }
    

    练习3.18:

    不合法,vector对象的下标只能用来访问已存在的元素,而不能用来添加元素。
    可以用ivec.push_back()函数来添加。

    练习3.19:

    vector<int> v1(10,42)   //第一种
    vector<int>v1={42,42,42,42,42,42,42,42,42,42} //第二种
    vector<int>v2;               //第三种
    for(int decltype(v1.size()) i=0; i!=10;i++)
    	v1.push_back(42);             
    

    练习3.20:
    实现:读入一组整数到vrctor对象中,要求先输出第一个和最后一个整数的和,然后输出第二个和倒数第二个整数的和,以此类推。

    #include<iostream>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    int main() 
    {
    	vector<int>v1;
    	int value;
    	while (cin >> value)
    		v1.push_back(value);
    	for (decltype(v1.size())i = 0; i <= v1.size() / 2; i++)
    		if (v1.size() % 2 != 0 && i == v1.size() / 2)
    			cout << v1[i] << endl;
    		else
    			cout << v1[i]+v1[v1.size()-1-i] << endl;
    
    	return 0;
    }
    

    练习3.22:
    实现:把text的第一部分改为大写,然后输出。

    #include<iostream>
    #include<string>
    #include<ctype.h>
    
    using namespace std;
    
    int main() 
    {
    	string text ("hello world");
    	for (auto it = text.begin(); it != text.end() && !isspace(*it); ++it)
    		*it = toupper(*it);
    	cout << text << endl;
    	return 0;
    }
    

    练习3.23:
    实现:创建一个含有10个整数的vector对象,用迭代器将所有元素的值变为原来的两倍,最后输出vector对象的内容。

    #include<iostream>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    int main() 
    {
    	vector<int>v1;
    	int t = 0;
    	for (unsigned i = 0; i != 10; i++)
    	{
    		cin >> t;
    		v1.push_back(t);          //创建含有10个整数的vector对象
    	}
    	for (auto it = v1.begin(); it != v1.end(); it++)
    	{
    		*it = *it * *it;          //用迭代器处理
    		cout << *it<<" ";
    	}
    	return 0;
    }
    

    练习3.28:

    函数体内的string型数组sa2与函数体内的string型数组sa,元素都是空。
    函数体内的int型数组ia2中的元素未初始化;函数体外的int型数组ia中的元素都是0.

    练习3.35:
    实现:利用指针将数组中的值置为0.

    using namespace std;
    int main() 
    {
    	int a[] = { 1,2,3,4,5,6 };
    	int* p = begin(a), * q = end(a);
    	while (p != q)
    	{
    		*p = 0;
    		cout << *p;
    		p++;
    	}
    }
    
  • 相关阅读:
    Python 爬虫js加密破解(一) 爬取今日头条as cp 算法 解密
    Python 爬虫实例(2)—— 爬取今日头条
    Python 爬虫实例(1)—— 爬取百度图片
    python 操作redis之——HyperLogLog (八)
    python 操作redis之——有序集合(sorted set) (七)
    Python操作redis系列之 列表(list) (五)
    Python操作redis系列以 哈希(Hash)命令详解(四)
    Python操作redis字符串(String)详解 (三)
    How to Install MySQL on CentOS 7
    Linux SSH远程文件/目录 传输
  • 原文地址:https://www.cnblogs.com/cosefy/p/12177914.html
Copyright © 2011-2022 走看看