第3章 字符串、向量和数组
练习3.1
略
练习3.2
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string s;
while (getline(cin, s))
cout << s << endl;
return 0;
}
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string s;
while (cin >> s)
cout << s << endl;
return 0;
}
练习3.3
cin>>sstring对象会自动忽略开头的空白并从第一个真正的字符开始读起,直到遇见下一处空白为止。getline(cin,s)函数从给定的输入流中读入内容,直到遇到换行符为止。
练习3.4
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
int main()
{
string s1, s2;
cin >> s1 >> s2;
if (s1 > s2)
cout << s1;
else if (s1 < s2)
cout << s2;
else
cout << "s1==s2";
return 0;
}
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
int main()
{
string s1, s2;
cin >> s1 >> s2;
if (s1.size() > s2.size())
cout << s1;
else if (s1.size() < s2.size())
cout << s2;
else
cout << "s1==s2";
return 0;
}
练习3.5
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
int main()
{
string s0, s;
while (cin >> s0)
s += s0;
cout << s;
return 0;
}
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
int main()
{
string s0, s;
while (cin >> s0)
s += s0+" ";
cout << s;
return 0;
}
练习3.6
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string s;
cin >> s;
for (char &c : s)
c = 'X';
cout << s << endl;
return 0;
}
练习3.7
输出不会改变输入的结果
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string s;
cin >> s;
for (char c : s)
c = 'X';
cout << s << endl;
return 0;
}
练习3.8
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string s;
cin >> s;
int i = 0;
while (i < s.size())
s[i++] = 'X';
cout << s << endl;
return 0;
}
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); ++i)
s[i] = 'X';
cout << s << endl;
return 0;
}
范围for语句更好,更加简洁。
练习3.9
非法,使用下标访问空string会引发不可预知的结果,VS2017输出一个空字符。
练习3.10
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
int main()
{
string s;
getline(cin, s);
for (char c : s)
if (!ispunct(c))
cout << c;
return 0;
}
练习3.11
当花括号中没有修改c的操作就是合法的,否则非法。c的类型是const char&
练习3.12
- (a)正确,创建一个vector,里面的元素是vector
- (b)错误,类型不匹配
- (c)正确,创建一个含有10个"null"的vector
练习3.13
- (a)0个元素
- (b)10个0
- (c)10个42
- (d)1个10
- (e)2个元素,分别是10和42
- (f)10个空字符串
- (g)10个"hi"
练习3.14
#include <iostream>
#include <vector>
using std::vector;
using std::cin;
int main()
{
vector<int> ivec;
int i;
while (cin >> i)
ivec.push_back(i);
return 0;
}
练习3.15
#include <iostream>
#include <string>
#include <vector>
using std::string;
using std::vector;
using std::cin;
int main()
{
vector<string> text;
string word;
while (cin >> word)
text.push_back(word);
return 0;
}
练习3.16
#include <iostream>
#include <string>
#include <vector>
using std::string;
using std::vector;
using std::cout;
using std::endl;
int main()
{
vector<int> v1;
vector<int> v2(10);
vector<int> v3(10, 42);
vector<int> v4{ 10 };
vector<int> v5{ 10,42 };
vector<string> v6{ 10 };
vector<string> v7{ 10,"hi" };
cout << "v1: " << v1.size() << " is: ";
for (auto i1 : v1)
cout << i1 << " ";
cout << endl;
cout << "v2: " << v2.size() << " is: ";
for (auto i2 : v1)
cout << i2 << " ";
cout << endl;
cout << "v3: " << v3.size() << " is: ";
for (auto i3 : v3)
cout << i3 << " ";
cout << endl;
cout << "v4: " << v4.size() << " is: ";
for (auto i4 : v4)
cout << i4 << " ";
cout << endl;
cout << "v5: " << v5.size() << " is: ";
for (auto i5 : v5)
cout << i5 << " ";
cout << endl;
cout << "v6: " << v6.size() << " is: ";
for (auto i6 : v6)
cout << i6 << " ";
cout << endl;
cout << "v7: " << v7.size() << " is: ";
for (auto i7 : v7)
cout << i7 << " ";
cout << endl;
return 0;
}
练习3.17
#include <iostream>
#include <string>
#include <vector>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
vector<string> text;
string word;
while (cin >> word)
text.push_back(word);
for (string &s : text)
{
for (char &c : s)
c = toupper(c);
}
for (string &s0 : text)
cout << s0 << endl;
return 0;
}
练习3.18
非法,修改如下
vector<int> ivec;
ivec.push_back(42);
练习3.19
vector<int> ivec1(10,42);
vector<int> ivec2{42,42,42,42,42,42,42,42,42,42};
vector<int> ivec3;
for (int i=0;i<10;++i)
ivec3.push_back(42);
第一种更好,更加简洁。
练习3.20
#include <iostream>
#include <vector>
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
vector<int> ivec;
int num = 0;
while (cin >> num)
ivec.push

本章详细解答了C++ Primer第五版第三章的各个练习,涵盖了字符串对象的特性、输入输出操作、向量与数组的初始化与使用等核心概念。通过练习,读者能深入理解C++中这些容器的运用和注意事项。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



