#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时发生错误,请问怎样修改能够达到统计单词数的作用
时间: 2024-03-17 18:44:55 浏览: 15
经过分析,您的代码在判断单词是否重复时存在问题。在每次读取完一个单词后,应该将sum的值重置为1,以便下一次判断。此外,您的judge函数也存在问题,当输入字符串以空格结尾时,会引发数组越界错误。以下是修改后的代码:
```
#include <stdio.h>
#include <string.h>
int i = 0;
char *judge(char str[]) {
static char sub[10];
int j = 0;
for (; str[i] != ' ' && str[i] != '\0'; i++) {
sub[j] = str[i];
j++;
}
sub[j] = '\0';
i++;
return sub;
}
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);
sum = 1; // 重置sum的值
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 (strchr(strstr, ' ') == NULL) 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]);
return 0;
}
```
这样修改后,您的代码应该能够正确地统计单词数量了。