zoukankan      html  css  js  c++  java
  • 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 = ''; // 创建char类型字符ch,prech,其中prech被初始化为''
    	cout << "请输入一段文本:" << endl;
    	while (cin >> ch){	// 接收用户的输入,直到遇到换行后的ctrl+z		
    		bool bl = true; // 开始分析用户的输入,首先将bl置为true
    		if (prech == 'f')  // 如果prech=='f',进入下面的语句块,判断第二个字符是啥;显然,第一次prech=='',所以不会进入的
    		{
    			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='';如果为真,让prech=当前的字符ch
    			prech = '';
    		}
    		else{
    			prech = ch;
    		}
    	}
    	cout << "ff的数量是:" << ffCnt << endl;
    	cout << "fl的数量是:" << flCnt << endl;
    	cout << "fi的数量是:" << fiCnt << endl;
    	system("pause");
    	return 0;
    }
    

    ch:当前输入的字符。

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

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

  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059132.html
Copyright © 2011-2022 走看看