参考代码:

#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 人评分

  评论区

第39行应该是:    l = strlen(s[book[i]-1)];
2020-02-07 20:12:33
  • «
  • 1
  • »