#include<iostream> #include <iomanip> #include <bits/stdc++.h> using namespace std; void Check(struct SqList b); int k=0;//l=0; typedef struct SqList { char word[20]; int length; } SqList; SqList a[10000],b[50]; int main() { //输入字典和待检测单词组 两个几乎一样的输入 for(int i=0;scanf("%s",&a[i])!=EOF;i++) { if(a[i].word[0]=='#') break; a[i].length=strlen(a[i].word); k++; } for(int i=0;scanf("%s",&b[i])!=EOF;i++) { if(b[i].word[0]=='#') break; b[i].length=strlen(b[i].word); //l++; Check(b[i]); } ///检测函数 } void Check(struct SqList b) { int num=0,o=1; for(int j=0;j<k;j++)//字典词 { if(strcmp(b.word,a[j].word)==0) { cout<<b.word<<" is correct"<<endl; o=0; break; } } if(o) { cout<<b.word<<":"; for(int j=0;j<k;j++) { if(b.length==a[j].length+1) { num=0; for(int m=0,n=0;a[j].word[m]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) { num++; m--; } if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } else if(b.length==a[j].length-1) { num=0; for(int m=0,n=0;b.word[n]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) { num++; n--; } if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } else if(b.length==a[j].length) { num=0; for(int m=0,n=0;a[j].word[m]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) num++; if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } } cout<<endl; } } 的程序运行流程
理解问题#include<iostream> #include <iomanip> #include <bits/stdc++.h> using namespace std; void Check(struct SqList b); int k=0;//l=0; typedef struct SqList { char word[20]; int length; } SqList; SqList a[10000],b[50]; int main() { //输入字典和待检测单词组 两个几乎一样的输入 for(int i=0;scanf("%s",&a[i])!=EOF;i++) { if(a[i].word[0]=='#') break; a[i].length=strlen(a[i].word); k++; } for(int i=0;scanf("%s",&b[i])!=EOF;i++) { if(b[i].word[0]=='#') break; b[i].length=strlen(b[i].word); //l++; Check(b[i]); } ///检测函数 } void Check(struct SqList b) { int num=0,o=1; for(int j=0;j<k;j++)//字典词 { if(strcmp(b.word,a[j].word)==0) { cout<<b.word<<" is correct"<<endl; o=0; break; } } if(o) { cout<<b.word<<":"; for(int j=0;j<k;j++) { if(b.length==a[j].length+1) { num=0; for(int m=0,n=0;a[j].word[m]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) { num++; m--; } if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } else if(b.length==a[j].length-1) { num=0; for(int m=0,n=0;b.word[n]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) { num++; n--; } if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } else if(b.length==a[j].length) { num=0; for(int m=0,n=0;a[j].word[m]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) num++; if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } } cout<<endl; } } 的程序运行流程
已完成理解「#include<iostream> #include <iomanip> #include <bits/stdc++.h> using namespace std; void Check(struct SqList b); int k=0;//l=0; typedef struct SqList { char word[20]; int length; } SqList; SqList a[10000],b[50]; int main() { //输入字典和待检测单词组 两个几乎一样的输入 for(int i=0;scanf("%s",&a[i])!=EOF;i++) { if(a[i].word[0]=='#') break; a[i].length=strlen(a[i].word); k++; } for(int i=0;scanf("%s",&b[i])!=EOF;i++) { if(b[i].word[0]=='#') break; b[i].length=strlen(b[i].word); //l++; Check(b[i]); } ///检测函数 } void Check(struct SqList b) { int num=0,o=1; for(int j=0;j<k;j++)//字典词 { if(strcmp(b.word,a[j].word)==0) { cout<<b.word<<" is correct"<<endl; o=0; break; } } if(o) { cout<<b.word<<":"; for(int j=0;j<k;j++) { if(b.length==a[j].length+1) { num=0; for(int m=0,n=0;a[j].word[m]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) { num++; m--; } if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } else if(b.length==a[j].length-1) { num=0; for(int m=0,n=0;b.word[n]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) { num++; n--; } if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } else if(b.length==a[j].length) { num=0; for(int m=0,n=0;a[j].word[m]!='\0';m++,n++) { if(a[j].word[m]!=b.word[n]) num++; if(num>=2) break; } if(num<=1) cout<<" "<<a[j].word; } } cout<<endl; } } 的程序运行流程」
展开阅读网页
这段C++代码的主要功能是检查一组单词是否在字典中存在,如果不存在,它会尝试找出与该单词长度相差1或相等的单词,并检查它们是否只有一个字符不同。下面是程序的运行流程:
-
定义了一个结构体
SqList
,包含一个字符串word
和一个整数length
。 -
定义了两个数组
a
和b
,分别用于存储字典中的单词和待检测的单词。 -
在
main
函数中,首先通过循环读取字典中的单词,直到遇到以#
开头的单词为止。对于每个读取的单词,计算其长度并存储在a
数组中。 -
然后,通过另一个循环读取待检测的单词,同样直到遇到以
#
开头的单词为止。对于每个读取的单词,调用Check
函数进行检查。 -
Check
函数接收一个SqList
类型的参数b
,表示待检测的单词。 -
在
Check
函数中,首先初始化两个变量num
和o
。num
用于记录比较过程中不同字符的数量,o
是一个标志,用于判断是否找到了匹配的单词。 -
通过一个循环遍历字典中的单词,使用
strcmp
函数比较待检测单词和字典中的单词是否相同。如果相同,输出该单词是正确的,并设置o
为0,然后跳出循环。 -
如果
o
仍然为1,说明没有找到完全匹配的单词,接下来会检查长度相差1或相等的单词。 -
对于每个字典中的单词,根据长度关系,分别进行以下检查:
- 如果待检测单词的长度比字典中的单词长1,检查它们是否只有一个字符不同。
- 如果待检测单词的长度比字典中的单词短1,同样检查它们是否只有一个字符不同。
- 如果长度相等,检查它们是否只有一个字符不同。
-
如果在上述检查中发现只有一个字符不同,将该字典中的单词输出。
-
最后,输出一个换行符,结束
Check
函数。 -
main
函数在读取完所有待检测单词并调用Check
函数后结束。
需要注意的是,代码中存在一些错误和不足之处,例如:
scanf
函数的参数应该是字符串数组的地址,而不是直接使用数组名。- 在
Check
函数中,b.length
应该是b.length
而不是b.length
。 - 代码中的嵌套循环可能会导致性能问题,特别是在处理大量数据时。
- 代码没有考虑单词中可能包含特殊字符或空格的情况。