《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++;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)