李成笔记网

专注域名、站长SEO知识分享与实战技巧

C++基础算法:统计字符数 统计字符数c语言函数

【题目描述】

给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。

【输入】

输入包含一行,一个字符串,长度不超过1000。

【输出】

输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。

【输入样例】

abbccc

【输出样例】

c 3

解题思路

此题比较简单,是排序算法的入门题。a-z总共有26个字母,所以我们可以声明一个a[26]的数组,a[0]存储a出现的次数,a[1]存储b出现的次数,依次类推,a[25]存储z出现的次数。然后遍历字符串,将对应位的值+1。这里有个小技巧,可以通过一个index值记录出现最多次数字母的索引值,在遍历过程中,对其进行赋值,详细见代码中的注释。

参考答案

#include "iostream"
using namespace std;

int main(){
    //创建数组,存储每个字母出现的次数(a存在索引为0的位置,b存储在1的位置,以此类推,z存储在25的位置)
    int a[26] = {};
    string c;
    cin>>c;
    int len = c.length();
    //出现最多次数字母所在的数组索引位置
    int index = 0;
    for(int i=0;i<len;i++){
        //字母出现次数+1
        a[c[i]-'a']++;
        //如果当前字母出现次数>已知的最多次数index位置的字母出现次数,则将index赋值为当前字母在a中的索引值
        //或者如果当前字母出现次数=已知的最多次数index位置的字母出现次数,且当前字母在a中的索引值小于index的值,同样需要将index赋值为当前字母在a中的索引值(即取ascii码最小的那一个字符)
        if(a[c[i]-'a'] > a[index] || (a[c[i]-'a']==a[index] && c[i]-'a'<index)){
            index = c[i] - 'a';
        }
    }
    //输出出现最多的字符和出现的次数
    printf("%c %d",'a'+index,a[index]);
    return 0;
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言