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. (WF, Debug) System.Xaml.XamlObjectWriterException: Cannot create unknown type '{clr-namespace:xx;assembly=xx}xx'.

    Load WF 后一开始运行的时候就发现 System.Xaml.XamlObjectWriterException: Cannot create unknown type '{clr-namespa ...

  2. 使用mybatis plus自动生成controller、service、dao、mapper、entity代码

    官网:http://mp.baomidou.com(这个项目不仅仅可以用于代码生成,还有分页等其他功能,是对mybatis的一层封装) 要求:基于sql自动生成domain.controller.se ...

  3. C++中接口与实现分离的技术 ZZ

    最简单清晰的例子:http://www.cnblogs.com/maoye/archive/2010/03/19/1690183.html 接口与实现分离 为什么这样设计? 主要原因是保持接口的稳定, ...

  4. 判断计算机是否可以ping通

    #!/usr/bin/python # -*- coding: utf-8 -*- import os of = open('servers.txt','r') ofw=open('servers_p ...

  5. 乘风破浪:LeetCode真题_003_Longest Substring Without Repeating Characters

    乘风破浪:LeetCode真题_003_Longest Substring Without Repeating Characters 一.前言 在算法之中出现最多的就是字符串方面的问题了,关于字符串的 ...

  6. January 04 2017 Week 1st Wednesday

    Nothing happens unless first a dream. 一切始于梦想. I have a dream, one day I can be the expert in this fi ...

  7. 51nod 1102 面积最大的矩形

    题目地址在这儿 求取:以某矩形g[i]为最小值的区间的左右端点,得到一个临时解.所有临时解中的最大值即为解. 求取区间的方法可以用单调栈,也可以用下面这种十分简洁的类似于递归的方法.下面这种解法求出来 ...

  8. 1001.A+B Format (20)解题描述

    1. 作业链接 2. 解题的思路过程 首先这是道简单的计算题,要求计算a+b的值. 看初值条件,将a和b的取值限制在一个区间内. 本题难点和重点是如何把输出值形成题目要求的格式. 因为负数可通过在前面 ...

  9. MS10-070 ASP.NET Padding Oracle信息泄露漏洞项目测试

    MS10-070 ASP.NET Padding Oracle信息泄露漏洞1         漏洞描述:ASP.NET由于加密填充验证过程中处理错误不当,导致存在一个信息披露漏洞.成功利用此漏洞的攻击 ...

  10. Xposed模块开发基本方法记录

    由于某些课程实验的要求,需要通过xposed框架对某应用进行hook操作,笔者选用了开源且免费的xposed框架进行实现.虽然网上存在一些利用xposed实现特定功能的文章资源,但大多均将xposed ...