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++;
    	}
    }
    
  • 相关阅读:
    转载:SQL语句执行顺序
    [Oracle/sql]查看当前用户名下有多少表 以及查看表字段信息
    [oracle/Sql]怎样比较两表的差异?
    从两表连接看Oracle sql优化器的效果
    使用Hint /*+ full(emp)*/ 将索引全扫描改成全表扫描,看cost差别
    全扫描与快速全索引扫描的比较实验
    Hint usenl usage /*+ leading(emp,dept) usenl(emp) */
    毛驴儿拉磨啊。 它走不出那个圈。 井里蛤蟆就能看见巴掌大的一块天呦!
    大数据技术之_03_Hadoop学习_02_入门_Hadoop运行模式+【本地运行模式+伪分布式运行模式+完全分布式运行模式(开发重点)】+Hadoop编译源码(面试重点)+常见错误及解决方案
    大数据技术之_03_Hadoop学习_01_入门_大数据概论+从Hadoop框架讨论大数据生态+Hadoop运行环境搭建(开发重点)
  • 原文地址:https://www.cnblogs.com/cosefy/p/12177914.html
Copyright © 2011-2022 走看看