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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章