C++ Primer5 练习5.12:编程统计一下含有两个字符的字符序列的数量:ff、fl、fi

一个字符只被统计一次。

#include
using namespace std;
int main(){
    unsigned int ffCnt = 0, flCnt = 0, fiCnt = 0;
    char ch, prech = '\0'; // 创建char类型字符ch,prech,其中prech被初始化为'\0'
    cout << "请输入一段文本:" << endl;
    while (cin >> ch){  // 接收用户的输入,直到遇到换行后的ctrl+z       
        bool bl = true; // 开始分析用户的输入,首先将bl置为true
        if (prech == 'f')  // 如果prech=='f',进入下面的语句块,判断第二个字符是啥;显然,第一次prech=='\0',所以不会进入的
        {
            switch (ch){
            case 'f': // 如果第二个字符是'f',那么ffCnt数量加1,同时bl设置成false
                ++ffCnt;
                bl = false;
                break;
            case 'l': // 如果第二个字符是'l',那么flCnt数量加1
                ++flCnt;
                break;
            case 'i': // 如果第二个字符是'i',那么fiCnt数量加1
                ++fiCnt;
                break;
            }
        }
        if (!bl){ // 此处判断bl的真假,如果为假,让prech='\0';如果为真,让prech=当前的字符ch
            prech = '\0';
        }
        else{
            prech = ch;
        }
    }
    cout << "ff的数量是:" << ffCnt << endl;
    cout << "fl的数量是:" << flCnt << endl;
    cout << "fi的数量是:" << fiCnt << endl;
    system("pause");
    return 0;
}

ch:当前输入的字符。

prech:记录上一个字符ch。初始化为'\0',根据bl决定更新为哪个值。如果bl==false,说明上一个字符和当前字符都是'f',置为'\0';如果bl为true,置为ch。

bl:未重复出现两个'f'标志,标志位为true,则说明确实没有重复出现两个f,如果标志位为false,说明重复出现了两个f。每次都初始化为true;若上一个值prech是'f',当前值ch又是'f',连续出现两个'f',置为false。

你可能感兴趣的:(C++ Primer5 练习5.12:编程统计一下含有两个字符的字符序列的数量:ff、fl、fi)