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。

发布了71 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qionggaobi9328/article/details/104550648
今日推荐