C++ Primer 第三章
来源:互联网 发布:w7怎么设置网络共享 编辑:程序博客网 时间:2024/06/09 23:49
- 练习3.1
#include <iostream>#include <string>#include "Sales_data.h"//using声明using std::cin;using std::cout;using std::endl;using std::cerr;int main(){ //计算50—100连加 int a = 50; int sum = 0; while (a <= 100) { sum += a; ++a; } cout << sum << endl;// return 0; //计算两个Sale_item对象的和 //读入Sale_data1和Sales_data2 Sales_data data1,data2; cin >> data1.ISBN >> data1.price >> data1.units_sold;//ISBN号、单价、销量 data1.revenue = data1.price * data1.units_sold;//销售额 cin >> data2.ISBN >> data2.price >> data2.units_sold; data2.revenue = data2.price * data2.units_sold; //判断ISBN号是否相同,如果相同,求和 double average = 0; if (data1.ISBN == data2.ISBN) { int totalCnt = data1.units_sold + data2.units_sold;//销售总量 double totalRevenue = data1.revenue + data2.revenue;//销售总额 //平均价格 if (totalCnt != 0) { average = totalRevenue/totalCnt; } else cout << "No sales" << endl; cout << data2.ISBN << " " << totalCnt << " " << totalRevenue << " " << average ; return 0; } else { cerr << "Data must refer to the same ISBN" << endl; return -1; }}
- 练习3.2、练习3.4、练习3.5
#include <iostream>#include <string>using std::string;using std::cin;using std::cout;using std::endl;int main(){/******************练习3.2********************/ string s; //一次读入一整行 while (getline(cin, s)) { cout << s << endl; } //一次读入一个词 //while (cin << s) //{ // cout << s << endl; //} /*********************练习3.4**********************/ string s1, s2; cin >> s1 >> s2; if (s1 == s2) { cout << "s1 = s2" << endl; } else { if (s1 > s2) { cout << s1 << endl; } else if (s1 < s2) { cout << s2 << endl; } } //判断是否等长 if (s1.size() == s2.size()) { cout << "s1.size = s2.size" << endl; } else { if (s1.size() < s2.size()) { cout << s2 << endl; } else { cout << s1 << endl; } } /**************练习3.5*******************/ string s3, s4; if (cin >> s3) { while (cin >> s4) { //s3 += s4; s3 = s3 + ' ' + s4; } cout << s3 << endl; } /********************************************ctrl+z to stop*****************************/ return 0;}
- 练习3.3
在执行读取操作时,string对象会自动忽略开头的空白(如空格符、换行符、制表符等)并从第一个真正的字符开始读起,知道遇见下一处空白为止;
getline会白柳输入时的空白符,从输入流中读入内容,知道遇到换行符为止,然后把所读的内容存入到那个string对象中去(不存换行符)。
练习3.6/3.8/3.10
#include <iostream>#include <string>using std::cin;using std::cout;using std::string;using std::endl;int main(){ /**********************range for********************/ string s1; cin >> s1; decltype(s1.begin()) i; for (i = s1.begin(); i < s1.end(); ++i)//for(auto c : s1) { *i = 'X';//c = 'X'; } cout << s1 << endl; /************************for*************************/ string s2; cin >> s2; string::size_type j; for (j = 0; j < s2.size(); ++j) { s2[j] = 'X'; } cout << s2 << endl; /***********************while*************************/ string s3; cin >> s3; string::size_type k = 0; while( k < s3.size() ) { s3[k] = 'X'; ++k; } cout << s3 << endl; /*********************del punctuation**********************/ string s4; cin >> s4; string::size_type m = 0; string res;/*************************非符号存放在新的string**************************/ while( m < s4.size()) { if (!ispunct(s4[m])) { res += s4[m]; ++m; } else ++m; } cout << res << endl; return 0;}
- 练习3.7
没影响。 - 练习3.9
不合法。因为s是空的。 - 练习3.11
合法。c是对常量char的引用。反正没法用rangefor。
练习3.14/3.15
#include <iostream>#include <string>#include <vector>using std::cin;using std::cout;using std::endl;using std::string;using std::vector;int main(){ //int i; string i; //vector<int> v; vector<string> v; while(cin >> i) { v.push_back(i); } return 0;}
- 练习3.16
#include <iostream>#include <string>#include <vector>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ vector<int> v1; vector<int> v2(10); vector<int> v3(10, 42);//10 //vector<int> v4{10}; //vector<int> v5{10, 42};//2 //vector<string> v6{10}; //vector<string> v7{10, "hi"}; int s1 = v1.size(); int s2 = v2.size(); int s3 = v3.size(); int i = 0; while (i < v2.size()) { cout << v2[i] << " "; ++i; } cout << endl; int j = 0; while (j < v3.size()) { cout << v3[j] << " "; ++j; } cout << endl << s1 << " " << s2 << " " << s3 <<endl;}
- 练习3.17
#include<iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::vector;using std::string;using std::endl;int main(){ string word; vector<string> v;//v中保存string对象 初始v为空 while (cin >> word)//当有string对象word输入时 { v.push_back(word);//把word push到对象尾端 } decltype(v.size()) i = 0;//计数器 vector<string> v2;//v2中保存string对象,用来存toupper后的v while (i < v.size())//对于容器v中的每一个string对象 { decltype(v[i].size()) j = 0; while (j < v[i].size())//对于该string对象的每一个字符 { v[i][j] = toupper(v[i][j]);//大写 ++j;//计数 } cout << v[i] << endl; ++i;//计数 } return 0;}
- 练习3.18
不合法。ivec是一个空vector,根本不包含任何元素,不能通过下标去访问任何元素,正确的方法是用push_back。 练习3.19
1.vector ivec(10, 42);
2.vector ivec{42,42,42,42,42,42,42,42,42,42};
3.vector ivec;
for(int i = 0; i != 10; ++i)
ivec.push_back(42);练习3.20
a)
#include <iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ int num; vector<int> v; while (cin >> num)//读入一组整数 { v.push_back(num); } decltype(v.size()) i = 0; decltype(v.size()) vs = v.size(); vector<int> res; //相邻数相加 while (i < v.size() - 1) { int m = v[i] + v[i + 1]; res.push_back(m); i = i + 2; } if (vs / 2 != 0)//如果有奇数个数 { res.push_back(v[vs - 1]); } //输出容器res中存放的结果 decltype(res.size()) k = 0; while (k < res.size()) { cout << res[k]; ++k; } return 0;}
b)
#include <iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ int num; vector<int> v; while (cin >> num)//读入一组整数 { v.push_back(num); } decltype(v.size()) i = 0; decltype(v.size()) vs = v.size(); vector<int> res; //相邻数相加 //while (i < v.size() - 1) //{ // int m = v[i] + v[i + 1]; // res.push_back(m); // i = i + 2; //} //首尾相加 while (i < vs/2 ) { int m = v[i] + v[vs - 1 - i]; res.push_back(m); ++i; } //如果是奇数个 if (vs %2 != 0) { res.push_back(v[vs / 2]); } //if (vs % 2 != 0)//如果有奇数个数 //{ // res.push_back(v[vs - 1]); //} //输出容器res中存放的结果 decltype(res.size()) k = 0; while (k < res.size()) { cout << res[k]; ++k; } return 0;}
- 练习3.21
#include <iostream>#include <string>#include <vector>using std::cin;using std::cout;using std::string;using std::vector;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" }; //v2 int cnt = 0; for (auto it = v2.begin(); it != v2.end();++it) { cout << (*it) << " "; ++cnt; } cout << endl << cnt << endl; //v3 int c3 = 0; for (auto it = v3.begin(); it != v3.end();++it) { cout << (*it) << " "; ++c3; } cout << endl << c3 << endl; //v4 int c4 = 0; for (auto it = v4.begin(); it != v4.end(); ++it) { cout << (*it) << " "; ++c4; } cout << endl << c4 << endl; //v5 int c5 = 0; for (auto it = v5.begin(); it != v5.end(); ++it) { cout << (*it) << " "; ++c5; } cout << endl << c5 << endl; //v6 int c6 = 0; for (auto it = v6.begin(); it != v6.end(); ++it) { cout << (*it) << " "; ++c6; } cout << endl << c6 << endl; //v7 int c7 = 0; for (auto it = v7.begin(); it != v7.end(); ++it) { cout << (*it) << " "; ++c7; } cout << endl << c7 << endl; return 0;}
- 练习3.22
#include <iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ vector<string> text; string word; while (cin >> word)//向text里面push_back字符串word { text.push_back(word); } for (auto it = text.begin(); it != text.end() && !it ->empty(); ++it)//对于vector容器text里的每一个string成员 { decltype(it->size()) i; for (i = 0; i != it->size(); ++i)//对于每一个string成员的每个字符 { (*it)[i] = toupper((*it)[i]);//大写 } cout << *it << endl;//输出 } return 0;}
- 练习3.23
#include <iostream>#include <string>#include <vector>using std::cin;using std::cout;using std::vector;using std::string;using std::endl;int main(){ vector<int> v;//不能用v(10),否则前十个数都是0 int dig; while (cin >> dig) { v.push_back(dig);//向vetor容器v中push_back数字 } for (auto i = v.begin(); i != v.end(); ++i) { *i = 2 * (*i); cout << *i << " "; } return 0;}
练习3.24
a)
#include <iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ vector<int> v; vector<int> res; int dig; while (cin >> dig) { v.push_back(dig); } int sum = 0; int size = v.size(); if (size %2 == 0)//输入偶数个整数 { for (auto it = v.begin(); it != v.end(); ++it) { sum = *it; it += 1; sum += *it; res.push_back(sum); cout << sum << " "; } cout << endl; } else { for (auto it = v.begin(); it != v.end() - 1; ++it) { sum = *it; it += 1; sum += *it; res.push_back(sum); cout << sum << " "; } auto i = v.end(); cout << *(i - 1) << endl; } return 0;}
b)
#include <iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ vector<int> v; vector<int> res; int dig; while (cin >> dig) { v.push_back(dig); } int sum = 0; int size = v.size(); auto mid = v.begin() + (v.end() - v.begin()) / 2; auto i2 = v.end() - 1; if (size % 2 == 0)//输入偶数个整数 { for (auto it = v.begin(); it != mid; ++it) { sum = *it + *i2; --i2; cout << sum << " "; } cout << endl; } else { for (auto it = v.begin(); it != mid; ++it) { sum = *it + *i2; --i2; cout << sum << " "; } cout << *(mid) << endl; } return 0;}
- 练习3.25
#include <iostream>#include <vector>#include <string>using std::cin;using std::cout;using std::string;using std::vector;using std::endl;int main(){ vector<int> scores(11, 0);//11个人数段 unsigned grade; auto it = scores.begin(); while (cin >> grade)//有成绩输入 { if (grade <= 100) { int n = grade / 10; *(it + n ) += 1; } } for (auto i = scores.begin(); i != scores.end(); ++i) { cout << *i << " "; } return 0;}
- 练习3.26
因为用(beg + end)的话,结果可能会超出总长度,指向未知的位置,VS2013报错。
0 0
- C++primer 第三章
- C++primer 第三章
- C Primer Plus 第三章
- C++Primer第三章习题
- C Primer Plus 第三章
- C++primer第三章笔记
- 《C++Primer》 第三章 标准库类型
- C++primer第三章:标准库类型
- C++primer第三章习题3.7
- C++Primer再读读书笔记:第三章
- 《C Primer Plus》第三章编程题
- C++Primer读书笔记(第三章)
- C++primer plus 6.0 第三章 数据处理
- c++primer第三章习题(1)
- c++primer第三章习题(2)
- c++primer 第三章习题(3)
- c++primer 第三章习题(4)
- 《C++Primer》 学习——第三章
- apache lucene solr 官网历史版本下载地址
- BZOJ3160 万径人踪灭 FFT+manacher
- 寻找两个排序数组的中位数
- iframe 中使用 window.name
- iOS runtime 机制 通过别扩展category给一个类添加属性
- C++ Primer 第三章
- 软件设计模式——工厂方法模式(Factory Method)
- 快速排序
- 竖式问题
- bzoj3175【TJOI2013】攻击装置
- 合并ajax请求
- fzu 2088 最长队名(字符串普通模拟,大大的水题)
- mac with go
- 【杭电】[4349]Xiao Ming's Hope