#include <stdio.h> #include <string.h> typedef struct { char w[16]; int length; }word; word s[10001]; void find(word a,int n) { int flag=1; for(int i=0;i<n;i++) { if(!strcmp(a.w,s[i].w)){ printf("%s is correct",a.w); flag=0; break; } } if(flag) { printf("%s:",a.w); for(int i=0;i<n;i++){ if(s[i].length==strlen(a.w)+1){ int j=0; int e=0; int t=0; for(;a.w[t];j++,t++){ if(a.w[t]!=s[i].w[j]){ t--; e++; } if(e>1) break; else if(e<=1){ printf(" %s",s[i].w); break;} } } else if(s[i].length==strlen(a.w)-1){ int j=0; int e=0; int t=0; for(;a.w[t];j++,t++){ if(a.w[t]!=s[i].w[j]){ j--; e++; } if(e>1) break; else if(e<=1){ printf(" %s",s[i].w); break;} } } else if(s[i].length==strlen(a.w)){ int j=0; int e=0; int t=0; for(;a.w[t];j++,t++){ if(a.w[t]!=s[i].w[j]){ e++; } if(e>1) break; else if(e<=1){ printf(" %s",s[i].w); break;} } } } } } int main() { word a; int n=0; while(scanf("%s",s[n].w)&&s[n].w[0]!='#') { s[n].length=strlen(s[n].w); n++; } while(scanf("%s",a.w)&&a.w[0]!='#'){ find(a,n); printf("\n"); } return 0; }哪里错了
时间: 2024-03-16 15:47:15 浏览: 48
这段代码是一个简单的拼写检查器,但是存在一些问题。具体来说,代码中的错误包括:
1. 在 `find()` 函数中,当找到正确的单词时,应该输出换行符,而不是空格。因此,正确的输出应该是 `printf("%s is correct\n", a.w)`。
2. 当检查单词时,应该只输出与输入单词相差一个字母的单词,而不是所有长度相差一个字母的单词。因此,应该在 `else if` 分支中加入一个判断条件,判断两个单词是否只相差一个字母。
3. 在检查单词时,应该先比较两个单词的长度是否相同,如果长度不同,则不需要比较单词的内容。因此,可以把 `else if` 分支的顺序调整一下,先判断长度相等的情况。
下面是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
char w[16];
int length;
} word;
word s[10001];
void find(word a, int n) {
int flag = 1;
for (int i = 0; i < n; i++) {
if (!strcmp(a.w, s[i].w)) {
printf("%s is correct\n", a.w);
flag = 0;
break;
} else if (abs((int)strlen(a.w) - (int)s[i].length) == 1) {
int j = 0;
int e = 0;
int t = 0;
for (; a.w[t]; j++, t++) {
if (a.w[t] != s[i].w[j]) {
t--;
e++;
}
if (e > 1)
break;
else if (e <= 1) {
if ((strlen(a.w) < s[i].length && t == strlen(a.w) - 1) ||
(strlen(a.w) > s[i].length && j == s[i].length - 1) ||
strlen(a.w) == s[i].length) {
printf(" %s", s[i].w);
break;
}
}
}
}
}
if (flag) {
printf("%s:", a.w);
}
}
int main() {
word a;
int n = 0;
while (scanf("%s", s[n].w) && s[n].w[0] != '#') {
s[n].length = strlen(s[n].w);
n++;
}
while (scanf("%s", a.w) && a.w[0] != '#') {
find(a, n);
printf("\n");
}
return 0;
}
```
阅读全文