c++第三十二天
p164~p170:
大致内容
迭代语句
1、while语句。
2、传统for。
3、范围for。
两个注意点是:1- 通常使用auto来确保类型相容,2- 如果需要修改元素则需要使用&符(还可以避免拷贝元素)。
4、do while。
两个特点:1- 条件部分不允许定义变量,2- 不管条件怎么样,都确保至少执行一次循环体。
练习
5.14
#include <iostream> #include <string> using namespace std; int main() { // 保存解 int maxl = 0; string maxs = ""; bool twoMax = false; // 当前单词 int k = 0; string word = ""; // 初始化 cin >> word; string lastw = word; k = 1; // 迭代处理 while (cin >> word) { if (word == lastw) { // 当前单词和上一个单词相同 ++k; } else { // 当前单词和上一个单词不同 if (k >= maxl) { // 处理特殊情况:有两个最大值 twoMax = (k == maxl)? true : false; maxl = k; maxs = lastw; } // 重置计数 lastw = word; k = 1; } } if (twoMax == true) { cout << "Without answer" << endl; } else { cout << "maxl=" << maxl << endl; cout << "maxs=" << maxs << endl; } return 0; }
5.15
a - ix仅在for语句块中可用
b - 缺少init-statement
c - 逻辑错误
5.16
略。倾向于是用传统for
5.17
#include <iostream> #include <vector> using namespace std; int main() { // 这种初始化方式只有c++11才能编译通过 vector<int> v1{0, 1, 1, 2}; vector<int> v2{0, 1, 1, 2, 3, 5, 8}; // 挑出长度较短的那个 int shortl = (v1.size() > v2.size()) ? v2.size() : v1.size(); // 标志变量 bool is_front = true; for (int i = 0; i != shortl; ++i) { if (v1[i] != v2[i]) { // 只要有一个元素不同就退出循环 is_front = false; break; } } // 输出结论 if (is_front) { cout << "是前缀!" << endl; } else { cout << "不是前缀。" << endl; } return 0; }
5.18
略!
5.19
#include <iostream> #include <string> using namespace std; int main() { string s1, s2; string short_one; do { cout << "请输入两个字符串:" << endl; cin >> s1 >> s2; // 赋值号的优先级巨低,要加上括号!!! cout << (short_one = (s1.size() > s2.size()) ? s2 : s1) << endl; } while (true); return 0; }