【C++程序题】字符数量

#【程序题】字符数量#

题目描述请统计一篇英文文章里所有小写字母各出现了几次。输入描述:输入若干行,处理到文件结尾符。字符总数<=100000输出描述:输出若干行,按字符序输出每种小写字符的出现次数,没有出现的字符不用输出。

示例1

输入abc abc

defabab ccc

ccc ccc

输出

a:4

b:4

c:11

d:1

e:1

f:1


我的思路大致分三大步,第一步获取数据到数组,第二步对数据进行冒泡排序,第三步统计数据,(第二步是为了第三步更方便统计,比如aaaabbcccf,只要判断后一位是不是和前一位相等)

具体思路详见下面。

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{

    char a[100000];
    int i = 0;
    int j;
    int k;
    char c;
    
    //第一步提取数据到数组a[]
    while ((c = getchar()) != EOF)
    {
        if (c >='a'&&c<='z')//题目有说明是统计小写字符,这里要加个条件
        {
            a[i] = c;
                i++;
        }
    }
    //第二步,这里就是冒泡排序
    for (j = 0; j < i-1; j++)
    {
        for (k = 0; k < i-j-1; k++)
        {
            if (a[k] > a[k + 1])
            {
                int t;
                t = a[k + 1];
                a[k + 1] = a[k];
                a[k] = t;
            }
        }
    }
    //第三步统计字符
    int t = 1;
    for (j = 0; j < i+1; j++)      /*这里注意是小于i+1,如果是<i,只循环到a[i-1],那么比如aaaaccf,这个f就不会打印出来,不理解可以走一遍*/
    {
        if (a[j] == a[j-1])            
        {
            t++;
        }
        else
        {
            if(j!=0)        //要去除j=0,a[0]的情况,否则,后面会打印出啊a[-1]
            {
                printf("%c:%d\n", a[j - 1], t);
                t = 1;         //到了新的字符,重置个数为1,再继续统计
            }
        }
    
    }
    return 0;
}

欢迎有更好的方法推荐!我们一起交流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值