#include<stdio.h> #include<string.h> int i=0; char *judge(char str[]); int main() { int key=0,num[100]={0},sum=1; char strstr[1000],*substr,newstr[100][10]; gets(strstr); substr=judge(strstr); strcpy(newstr[key],substr); num[key]++; key++; while(1) { substr=judge(strstr); for(int j=0;j<key;j++) { if(strcmp(substr,newstr[j])==0) { num[j]++; sum=0; break; } } if(sum) { strcpy(newstr[key],substr); num[key]++; key++; } if(strstr[i-1]=='\0') break; } for(i=1;i<key;i++) { for(int j=0;j<key-i;j++) { if(stricmp(newstr[j],newstr[j+1])>0) { char t[10]; strcpy(t,newstr[j]); strcpy(newstr[j],newstr[j+1]); strcpy(newstr[j+1],t); int k; k=num[j]; num[j]=num[j+1]; num[j+1]=k; } } } for(i=0;i<key;i++) printf("%s %d\n",newstr[i],num[i]); } char *judge(char str[]) { static char sub[10]; int j=0; for(;str[i]!=' '&&str[i]!='\0';i++) { sub[j]=str[i]; j++; } i++; sub[j]='\0'; return(sub); } 我的代码在运行样例a b a c时发生错误,输出结果时c的次数没有正确输出,请问怎样修改
时间: 2024-03-17 14:45:09 浏览: 49
在你的代码中,最后一个单词可能没有空格,导致在最后一个单词时没有执行 `num` 自增,需要在 `while` 循环结束后再单独处理最后一个单词。具体地,你可以在 `while` 循环结束后再执行一次 `judge()` 函数并处理最后一个单词。
可以将代码修改如下:
```c
#include<stdio.h>
#include<string.h>
int i=0;
char *judge(char str[]);
int main() {
int key=0,num[100]={0},sum=1;
char strstr[1000],*substr,newstr[100][10];
gets(strstr);
substr=judge(strstr);
strcpy(newstr[key],substr);
num[key]++;
key++;
while(1) {
substr=judge(strstr);
if(strstr[i-1]=='\0') { // 处理最后一个单词
for(int j=0;j<key;j++) {
if(strcmp(substr,newstr[j])==0) {
num[j]++;
sum=0;
break;
}
}
if(sum) {
strcpy(newstr[key],substr);
num[key]++;
key++;
}
break;
}
for(int j=0;j<key;j++) {
if(strcmp(substr,newstr[j])==0) {
num[j]++;
sum=0;
break;
}
}
if(sum) {
strcpy(newstr[key],substr);
num[key]++;
key++;
}
sum=1;
}
for(i=1;i<key;i++) {
for(int j=0;j<key-i;j++) {
if(stricmp(newstr[j],newstr[j+1])>0) {
char t[10];
strcpy(t,newstr[j]);
strcpy(newstr[j],newstr[j+1]);
strcpy(newstr[j+1],t);
int k;
k=num[j];
num[j]=num[j+1];
num[j+1]=k;
}
}
}
for(i=0;i<key;i++)
printf("%s %d\n",newstr[i],num[i]);
}
char *judge(char str[]) {
static char sub[10];
int j=0;
for(;str[i]!=' '&&str[i]!='\0';i++) {
sub[j]=str[i];
j++;
}
i++;
sub[j]='\0';
return(sub);
}
```
这样,即使最后一个单词没有空格,也能正确处理了。
阅读全文