#include <iostream> #include <cstring> #define MAX 10001 using namespace std; typedef char ElemType; typedef struct List{ ElemType elem[MAX]; int Length; }SqList; int n=0; void compare(SqList P); SqList L[MAX]; int main(){ while(cin>>L[n].elem){ if(L[n].elem[0]=='#') break; L[n].Length=strlen(L[n].elem); n++; } SqList P; while(cin>>P.elem){ if(P.elem[0]=='#') break; P.Length=strlen(P.elem); compare(P); } } void compare(SqList P){ int cnt=0,i; for(i=0;i<n;i++){ if(strcmp(L[i].elem,P.elem)==0) cout<<P.elem<<" is correct"<<endl; cnt=1; break; } if(cnt==0){ cout<<P.elem<<":"; int j,k; for(i=0;i<n;i++){ if(P.Length-L[i].Length==1){ int nt=0; for(j=0,k=0;L[i].elem[j]!='\0';j++,k++){ if(L[i].elem[j]!=P.elem[k]){ nt++; k--; } if(nt>=2) break; } if(nt<=1) cout<<" "<<L[i].elem; } if(L[i].Length-P.Length==1){ int nt=0; for(j=0,k=0;P.elem[k]!='\0';j++,k++){ if(L[i].elem[j]!=P.elem[k]){ nt++; k--; } if(nt>=2) break; } if(nt<=1) cout<<" "<<L[i].elem; } if(P.Length-L[i].Length==0){ int nt=0; for(j=0,k=0;P.elem[j]!='\0';j++,k++){ if(P.elem[j]!=L[i].elem[k]){ nt++; } if(nt>=2) break; } if(nt<=1) cout<<" "<<L[i].elem; } } cout<<endl; } }找出不能输出的原因
时间: 2024-04-23 11:21:34 浏览: 149
#include <iostream>
这段代码存在一个逻辑错误,导致无法输出结果。具体原因是在比较每个单词与用户输入单词是否匹配时,当匹配失败时,程序会进入一个 for 循环来查找与用户输入单词差别最小的单词,但是在 for 循环中,程序对 cnt 变量的赋值操作放在了循环体内,导致循环只会执行一次,即只查找单词库中的第一个单词,而不会遍历整个单词库。因此,程序无法找到差别最小的单词,也就无法输出任何结果。要修复这个问题,应该将 cnt 变量的赋值操作放在 for 循环外部,确保循环能够遍历整个单词库。
阅读全文