连续输入多个字符时统计字符重复次数的一般方法
2017-06-21 22:15
288 查看
在C++primer的第五章练习题中,涉及到多道关于连续输入多个单词的习题,例如题5.12、5.14等,它通过比较前后输入的单词是否相等,来统计单词重复出现的次数。
它们都有一个基本的思路:
首先看一下练习5.14:编写一段程序,从标准输入中读取若干string对象并查找连续重复出现的单词。所谓连续重复出现的意思:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应的单词。如果这样的单词存在,输入重复出现的最大次数;如果不存在,输出一条信息说明任何单词都没有连续出现过。例如,如果输入是
how now now now brown cow cow
那么输出应该表明单词now连续出现了3次。
其中核心思想是:连续输入多个变量时,先用
然后再用
具体主要思路如下:
但是,如果输入字符串连续出现的次数相同,程序只能输出第一个字符串的出现次数,不能将连续出现次数相同最大的字符串显示出来。
下面是一网上的大佬的答案http://blog.csdn.net/misayaaaaa/article/details/53998401
练习5.12:修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、f1和fi,其中xxxff1xxx的统计结果为:ff:1次,f1:0次,fi:0次。xxxxfifffff1xxx,则统计结果是:ff:2次,f1:1次,fi:1次。
以上思路类似。
它们都有一个基本的思路:
首先看一下练习5.14:编写一段程序,从标准输入中读取若干string对象并查找连续重复出现的单词。所谓连续重复出现的意思:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应的单词。如果这样的单词存在,输入重复出现的最大次数;如果不存在,输出一条信息说明任何单词都没有连续出现过。例如,如果输入是
how now now now brown cow cow
那么输出应该表明单词now连续出现了3次。
#include<iostream> #include<string> using namespace std; int main() { string currString, preString = "", maxString; int currCnt = 1, maxCnt = 0; while(cin >> currString) { if(currString == preString) { ++currCnt; if(currCnt > maxCnt) { maxString = currString; maxCnt = currCnt; } } else currCnt = 1; preString = currString; } if(maxCnt > 1) cout << "出现最多的字符串是:" << maxString << ",次数是:" << maxCnt <<endl; else cout << "每个字符串都只出现一次" <<endl; return 0; }
其中核心思想是:连续输入多个变量时,先用
preString = currString保存输入的前一个变量
然后再用
if(currString == preString)去比较前后输入的变量之间的关系。
具体主要思路如下:
while(cin >> currString) { if(currString == preString) { ... } preString = currString }
但是,如果输入字符串连续出现的次数相同,程序只能输出第一个字符串的出现次数,不能将连续出现次数相同最大的字符串显示出来。
下面是一网上的大佬的答案http://blog.csdn.net/misayaaaaa/article/details/53998401
#include <iostream> #include <string> #include <vector> using namespace std; void main() { string My_string, before_string, max_repeatstring; vector<string> vec1;//存放每个连续输入的单词 vector<int> vec2;//存放每个连续输入的次数 int repeat_number = 0, flag = 0,m = 0; while (cin >> My_string) { if (My_string == before_string) { ++repeat_number; m++;//此变量是因为最后输入的单词不会在调用else,所以需要记录下本单词的出现次数 } else { vec2.push_back(rep 4000 eat_number);//记录下上一个单词的重复次数 repeat_number = 1; before_string = My_string; vec1.push_back(My_string);//此次输入了与上次不同的单词,记录下来 m = 0; } } vec2.push_back(m+1); int a = 0; vector<int>::iterator it1 = vec2.begin(); for (it1; it1 != vec2.end(); ++it1) { if (*it1 >a) { a = *it1;//找到最大元素 } } for (int i = 0; i< vec2.size(); i++) { if (vec2[i] == a) { cout<<"单词"<<vec1[i-1]<<"出现的次数为:"<<vec2[i]<<"次"<<endl; } } }基本思想是利用vector存储输入的字符串,然后寻找最大元素再进行遍历比较。
练习5.12:修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、f1和fi,其中xxxff1xxx的统计结果为:ff:1次,f1:0次,fi:0次。xxxxfifffff1xxx,则统计结果是:ff:2次,f1:1次,fi:1次。
#include<iostream> using namespace std; int main() { int ffcnt = 0, f1cnt = 0, ficnt = 0; char ch, prech = '\0'; while(cin>>ch) { bool b1 = true; if(prech == 'f') { switch(ch) { case 'f': ++ffcnt; b1 = false; break; case '1': ++f1cnt; break; case 'i': ++ficnt; break; } } if(!b1) prech = '\0'; else prech = ch; } cout << "ff的数量是:" << ffcnt <<endl; cout << "f1的数量是:" <<f1cnt <<endl; cout << "fi的数量是:" <<ficnt <<endl; return 0; }
以上思路类似。
相关文章推荐
- java统计字符串中的字符重复的次数和和出现次数 实例(输入字符串)
- 用递归的方法算出给定字符串的最大连续重复字符的重复次数
- 连续输入多个字符出现的问题解决方法
- java统计字符串中重复字符出现次数的方法
- 一没考虑单词重复,二没考虑先输入空格,三没考虑后面连续输空格,方法见空格将空格前面的当成一个字符串,字符串比较是否相同,再统计
- 从终端输入中统计数字,空白符,其他字符出现次数
- 【练手】写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
- 如何用正则表达式实现规定用户输入密码的格式为:(长度6到18个字符,不能全为重复字母,或者连续字母)
- 汇编语言统计输入中各字符出现的次数
- 重复字符的统计 - 从网上总结来的几种方法
- 输入字符串,删除重复次数最多的字符
- 输入任意字符串,统计字符串中每个字符出现的次数
- C#统计给定的文本中字符出现的次数,使用循环和递归两种方法
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.
- 由计算机产生0-9之间的随机整数,用户输入猜测的数据,统计用户猜测的次数。产生随机数可以使用Math.rangom()静态方法,该方法返回正的double类型浮点数位于(0.0 1.0】间。
- VBS去除字符串的重复项并统计重复字符出现的次数
- 一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复最多的则都输出。
- 几种统计一段字符串中所有字符出现次数的方法
- 汇编语言统计输入中各字符出现的次数