zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Adventure C CF-665E(字典树、二进制)
    实验7投资问题
    Beautiful Array CF-1155D(DP)
    Salary Changing CF-1251D(二分)
    Beautiful Sets of Points CF-268C(乱搞)
    Vasya And Array CF1187C(构造)
    Tree Painting CF-1187E(换根DP)
    Vus the Cossack and Numbers CF-1186D(思维)
    Tree POJ-1741(点分治+树形DP)
    Magical Girl Haze 计蒜客-A1958(分层最短路)
  • 原文地址:https://www.cnblogs.com/xkxf/p/6546814.html
Copyright © 2011-2022 走看看