一個字符只被統計一次。
#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。