C++ Primer5 练习5.12:编程统计含有两个连续字符(ff、fl、fi)的字符序列的数量
一个字符只被统计一次。
#include<iostream>
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。