参考代码:
#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语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:642 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:566 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:524 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:585 |
复数求和 (C语言代码)浏览:994 |
数列排序 (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:826 |
逆反的01串 (C语言代码)浏览:1528 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:515 |
一起闹〆朱瑞晗 2020-02-07 20:14:05 |
应该是 l = strlen(s[book[i]-1]);