其他分享
首页 > 其他分享> > 英文单词统计助手

英文单词统计助手

作者:互联网

题目描述:设计一个程序实现英文短文单词的统计任务。

(1)输入若干行英文,语句间用逗号,句点分隔,单词之间用空格分隔。

(2)统计并输出单词的总数。

(3)统计各英文字符出现的次数(标点符号及空格不统计),并按出现的次数降序输出。

(4)系统以菜单方式工作。

另:(1)句子末尾一定要输入句号,否则会导致输出的单词数少一

(2)引入c变量,解决因cnt数组中可能存在重复数据,而导致的有些字母重复出现的问题(假如cnt[0]=cnt[1]=1,在循环逆序识别到cnt[1]时就会把所有出现次数为1的字符输出);c的初值最好为·负值;记得更新c的值

(3)用两个数组记录对应字符出现次数

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char ch[1000];
int a;

char b[53] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int cnt[60], cout[60];

int main() {
    gets(ch);
    int l = strlen(ch);
    for (int i = 0; i < l; i++) {
        if (ch[i] == '\0')
            break;//一但识别到'\0',默认短文输入结束
        else if (ch[i] == ' ' || ch[i] == ',' || ch[i] == '.') {
            a++;
            continue;//出现空格,逗号,句号表明前面一定有一个单词
        } else {
            for (int j = 0; j < 52; j++) {
                if (ch[i] == b[j]) {
                    cnt[j]++;//特定下标对应特定字母,统计对应字符个数
                    cout[j]++;/*用两个数组存储是为了方便下面对其中一个数组操作,让字符出现次数从小到大(从大到小)顺序排列,然后通过另一个数组找出与该出现次数对应的字符*/
                    break;//ch[i]是一个字符,所以一旦识别到对应的b[j]就可以直接跳出循环,减少时间复杂度
                }
            }//统计不同字符个数
        }
    }
    sort(cnt, cnt + 52);
    int c = -1;
    for (int i = 51; i >= 0; i--) {//因为上面按从小到大顺序排序,题目要求降序输出,所以这里逆序识别
        if (cnt[i] != 0
                && cnt[i] != c) {//cnt[i]等于0,表示该字符未出现过;cnt[i]可能会有重复数据,cnt[i] != c可以防止有些字母重复出现
            for (int j = 0; j < 52; j++) {
                if (cout[j] == cnt[i]) {
                    printf("%c ", b[j]);//找出与该出现次数对应的字符并全部输出
                }
            }
        }
        c = cnt[i];//c需要不断更新
    }
    printf("\n");
    printf("%d", a);

    return 0;
}
第一次写题解,会有很多不足,欢迎指正呀

标签:字符,cnt,ch,次数,int,助手,++,英文单词,统计
来源: https://blog.csdn.net/m0_62024160/article/details/122828288