3.1节

练习3.1:

使用恰当的using声明重做1.4.1节(第11页)和2.6.2节(第67页)的练习

#ifdef 1
#include <iostream>
using std::cin;
using std::cout;
using std::endl; int main(void)
{
int sum = 0;
int i = 50; while (i <= 100) {
sum += i;
i++;
} cout << sum << endl;
return 0;
}
#endif #ifdef 2
#include <iostream>
using std::cin;
using std::cout;
using std::endl; int main(void)
{
int n = 10;
while (n >= 0) {
cout << n << endl;
n--;
}
return 0;
}
#endif #ifdef 3
#include <iostream> using std::cout;
using std::cin;
using std::endl; int main(void)
{
int i, j;
cout << "input two value" << endl;
cin >> i >> j; int bigger, smaller;
bigger = (i > j ? i : j);
smaller = (i > j ? j : i); while ( smaller <= bigger ) {
cout << smaller << endl;
smaller++;
} return 0;
} #endif

3.2.2 节练习

练习3.2:

编写一段程序从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词。

#include <iostream>
#include <string> using std::cin;
using std::cout;
using std::endl;
using std::string; int main(void)
{
string str; // while (getline(cin, str))
// cout << str << endl; while (cin >> str)
cout << str << endl; return 0; }

练习3.3:

请说明string类的输入运算符和getline函数分别是如何处理空白字符的。

空白字符包含换行符,空格符,制表符等。

cin从第一个非空白字符开始,将标准输入流的字符传递给指定字符串,并且以空字符为结束。

getline从标准输入流读取用户输入的内容,以换行符作为结束(换行符也被读入流),并将流写入str(抛弃换行符)。

练习3.4

编写一段程序读入两个字符串,## 3.1节

练习3.1:

使用恰当的using声明重做1.4.1节(第11页)和2.6.2节(第67页)的练习

#ifdef 1
#include <iostream>
using std::cin;
using std::cout;
using std::endl; int main(void)
{
int sum = 0;
int i = 50; while (i <= 100) {
sum += i;
i++;
} cout << sum << endl;
return 0;
}
#endif #ifdef 2
#include <iostream>
using std::cin;
using std::cout;
using std::endl; int main(void)
{
int n = 10;
while (n >= 0) {
cout << n << endl;
n--;
}
return 0;
}
#endif #ifdef 3
#include <iostream> using std::cout;
using std::cin;
using std::endl; int main(void)
{
int i, j;
cout << "input two value" << endl;
cin >> i >> j; int bigger, smaller;
bigger = (i > j ? i : j);
smaller = (i > j ? j : i); while ( smaller <= bigger ) {
cout << smaller << endl;
smaller++;
} return 0;
} #endif

3.2.2 节练习

练习3.2:

编写一段程序从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词。

#include <iostream>
#include <string> using std::cin;
using std::cout;
using std::endl;
using std::string; int main(void)
{
string str; // while (getline(cin, str))
// cout << str << endl; while (cin >> str)
cout << str << endl; return 0; }

练习3.3:

请说明string类的输入运算符和getline函数分别是如何处理空白字符的。

空白字符包含换行符,空格符,制表符等。

cin从第一个非空白字符开始,将标准输入流的字符传递给指定字符串,并且以空字符为结束。

getline从标准输入流读取用户输入的内容,以换行符作为结束(换行符也被读入流),并将流写入str(抛弃换行符)。

练习3.4

编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string; int main(void)
{
string str1, str2;
cin >> str1 >> str2; string max; if (str1 != str2) {
max = (str1 > str2) ? str1 : str2;
cout << max << endl;
} if (str1.size() != str2.size()) {
max = (str1.size() > str2.size()) ? str1 : str2;
cout << max << endl;
} return 0;
}

练习3.5

编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。

#include <iostream>
#include <string> using std::cin;
using std::cout;
using std::endl;
using std::string; int main(void)
{
string str1, str2, str3; cin >> str1 >> str2 >> str3;
string cat = str1 + " " + str2 + " " + str3; cout << cat << endl; return 0;
}

3.2.3 节练习

练习3.6:

编写一段程序,使用范围for语句将字符串内的所有字符用X代替。

    string str = "hello world";
cout << str << endl; for (auto &c : str) {
c = 'X';
}

练习3.7:

就上一题完成的程序而言,如果将循环控制变量的类型设为char 将发生什么?先估计一下结果,然后实际编程验证。

将循环变量改为char类型,字符串的值不会改变。



练习3.8:

分别用while循环和传统的for循环重写第一题的程序,你觉得哪种形式更好呢?为什么?

我觉得区别不大

    string str = "hello world";
cout << str << endl; //1
for (auto &c : str) {
c = 'X';
} //2
int i = 0;
while (i < str.size()) {
str[i] = 'X';
}
cout << str << endl; //3
// int i;
// for (i = 0; i < str.size(); i++)
// str[i] = 'X';
// cout << str << endl;

练习3.9:

下面的程序有何作用?它合法吗?如果不合法,为什么?

string s;

cout << s[0] << endl;

s为空,s[0]的结果未定义,书上的答案。具体还有待探索。

练习3.10:

编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。

练习3.11:

下面的范围for语句合法吗?如果合法,c的类型是什么?

const string s = "Keep out!";

for (auto &c : s) { /* ... */ }

不合法,s是一个常量字符串,不能对其进行修改。

3.3.1节练习

练习3.12:

下列vector对象的定义有什么不正确的吗?如果有,请指出来。对于正确的,描述起执行结果;对于不正确的,说明其错误的原因。

(a) vector<vector> vec;

(b) vector svec = ivec;

(c) vector svec(10, "null");

b选项不正确,类型不匹配。

练习3.13:

下列的vector对象各包含多少个元素?这些元素的值分别是多少?

(a) vector v1;

0个

(b) vector v2(10);

10个0

(c) vector v3(10, 42);

10个42

(d) vector v4{10};

1个10

(e) vector v5{10, 42};

2个元素,10和42

(f) vector v6{10};

1个10

3.3.2节练习

练习3.14:

编写一段程序,用cin读入一组整数并把它们存入一个vector对象

C++ primer第三章作业的更多相关文章

  1. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

  2. C++Primer 第三章

    //1.位于头文件中的代码一般不应该使用using声明.这是因为头文件的内容会拷贝到所有引用它的文件中,可能会产生始料未及的命名空间冲突. // 三种使用命名空间中的名字的方法 using names ...

  3. C++ Primer 第三章 标准库类型vector+迭代器iterator 运算

    1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...

  4. <<C++ Primer>> 第三章 字符串, 向量和数组 术语表

    术语表 第 3 章 字符串, 向量和数组 begin: 是 string 和 vector 的成员,返回指向第一个元素的迭代器.也是一个标准库函数,输入一个数字,返回指向该数字首元素的指针.    缓 ...

  5. C++ Primer 第三章 标准库类型string运算

    1. 标准库类型 string string表示可变长的字符序列,使用string必须首先包含string头文件.如何初始化类的对象是由类本身决定的. int n; string s1;//默认初始化 ...

  6. C++ Primer 第8章作业

    练习8.1 编写函数,接受一个istream&参数,返回值类型也是istream&. 此函数须从给定流中读取数据,直至遇到文件结束标识时停止.它将读取的数据打印在标准输出上.完成这些操 ...

  7. c++primer 第三章编程练习答案

    3.7.1 #include<iostream> int main() { using namespace std; ; int height,inch,foot; cout <&l ...

  8. c++ primer 第三章 标准库类型

    1. string 标准库 1.1初始化 string s1; 默认构造函数s1为空 string s2(s1); 将s2初始化为s1的一个副本 string s3("value" ...

  9. C++ Primer 笔记 第三章

    C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 ...

随机推荐

  1. How To Manage StartUp Applications In Ubuntu

    Ever felt the need to control startup applications in Ubuntu? You should, if you feel that your Ubun ...

  2. Linked List Cycle 判断一个链表是否存在回路(循环)

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  3. Oracle Merge Into的用法详解

    1.    MERGE INTO 的用途         MERGE INTO 是Oracle 9i以后才出现的新的功能.那这个功能 是什么呢?         简单来说,就是:“有则更新,无则插入” ...

  4. django定义Model中的方法和属性

    #定义一个Model class UserProfile(models.Model): user=models.OneToOneField(User,unique=True) phone=models ...

  5. Win10 Docker修改镜像存储位置

    发生现象: 在windows10下安装docker for windows,随着用docker pull image文件后,C盘的容量越来越小了,你可能也有一种跟我一样的想法,想改变默认的安装路径,本 ...

  6. LeetCode算法题 菜鸟总结

    近期准备抽出一点时间,刷一些题防止手生,毕竟codemonkey,吃饭的手艺不能忘. ······································· 基本的题目都是基于java语言解答 ...

  7. console 程序随系统启动及隐藏当前程序窗口

    应业务需求,程序需要与系统启动而自动运行,故加入以下代码,保存成 .bat文件 ,双击执行即可 reg add "HKEY_CURRENT_USER\Software\Microsoft\W ...

  8. August 25th 2017 Week 34th Friday

    Stop to have a rest, do not forget others still in the running. 停下来休息的时候,不要忘记别人还在奔跑. You don't need ...

  9. [COGS 0407][NOIP 2009] 靶形数独

    407. [NOIP2009] 靶形数独 ★★   输入文件:sudoku.in   输出文件:sudoku.out   简单对比时间限制:5 s   内存限制:128 MB [问题描述] 小城和小华 ...

  10. c++计算器后续(4)

    自娱自乐: 大概是终于做到没做完的部分了,第三步助教学长的评论还没去改,感觉那个把读取文件放到Scan里面比较麻烦,其他大概还好.以上. 文件读写: 先是原来的残留问题,都是和fstream :: o ...