原题链接:蓝桥杯算法提高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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复