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;
}

 

posted @ 2017-03-14 09:30  xkfx  阅读(197)  评论(0编辑  收藏  举报