原题链接:蓝桥杯算法提高VIP-统计单词数
参考代码:
#include <stdio.h> #include <string.h> int main(){ char s[101][21]; //单词 int book[100] = {0},count[100] = {0}; //记录不重复的单词的出现位置,单词出现的次数 int ss = 0,sss = 0,l = 0,maxl = 0; //单词个数,不重复的单词个数,单词的长度,最长的单词的长度 int i,j; while(scanf("%s", s[ss]) != EOF){ l = strlen(s[ss])-1; if(s[ss][l] == '.' || s[ss][l] == ','){ s[ss][l] = '\0'; //保证单词中只含有字母 } ss++; } for(i = 0; i < ss; i++){ for(j = 0; s[i][j] != '\0'; j++){ if(s[i][j] >= 'A' && s[i][j] <= 'Z'){ s[i][j] += 32; //保证单词中的字母都是小写的 } } } for(i = 0; i < ss; i++){ if(strlen(s[i]) > 0){ book[sss] = i+1; //不赋值i,而赋值i+1是因为第一个字符串是从i=0开始的,且后面的判断条件是book[i]>0,所以赋值i+1而不是i for(j = 0; j < ss; j++){ if(strcmp(s[i],s[j]) == 0){ if(i != j){ s[j][0] = '\0'; //保证单词s[i]不会重复匹配 } count[sss]++; //记录单词出现的次数 } } sss++; } } for(i = 0; i < sss; i++){ l = strlen(s[i]); if(maxl < l){ maxl = l; } } for(i = 0; i < sss; i++){ if(book[i] > 0){ for(j = 0; s[book[i]-1][j] != '\0'; j++){ if(s[book[i]-1][j] >= 'a' && s[book[i]-1][j] <= 'z'){ s[book[i]-1][j] -= 32; //保证单词在输出时是大写的 } } if(strlen(s[book[i]-1]) == maxl){ printf("%s:", s[book[i]-1]); for(j = 0; j < count[i]; j++){ printf("*"); } printf("%d", count[i]); } else{ printf("%*s:", maxl,s[book[i]-1]); //%*s由变量maxl控制最小字段宽度且输出字符串 for(j = 0; j < count[i]; j++){ printf("*"); } printf("%d", count[i]); } printf("\n"); } } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复