复制
收藏
提问
全网

#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; } } 的程序运行流程

dc3049813
4个月前
全网
文档
学术
百科
知识库
时间不限
自动

理解问题#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或相等的单词,并检查它们是否只有一个字符不同。下面是程序的运行流程:

  1. 定义了一个结构体SqList,包含一个字符串word和一个整数length

  2. 定义了两个数组ab,分别用于存储字典中的单词和待检测的单词。

  3. main函数中,首先通过循环读取字典中的单词,直到遇到以#开头的单词为止。对于每个读取的单词,计算其长度并存储在a数组中。

  4. 然后,通过另一个循环读取待检测的单词,同样直到遇到以#开头的单词为止。对于每个读取的单词,调用Check函数进行检查。

  5. Check函数接收一个SqList类型的参数b,表示待检测的单词。

  6. Check函数中,首先初始化两个变量numonum用于记录比较过程中不同字符的数量,o是一个标志,用于判断是否找到了匹配的单词。

  7. 通过一个循环遍历字典中的单词,使用strcmp函数比较待检测单词和字典中的单词是否相同。如果相同,输出该单词是正确的,并设置o为0,然后跳出循环。

  8. 如果o仍然为1,说明没有找到完全匹配的单词,接下来会检查长度相差1或相等的单词。

  9. 对于每个字典中的单词,根据长度关系,分别进行以下检查:

    • 如果待检测单词的长度比字典中的单词长1,检查它们是否只有一个字符不同。
    • 如果待检测单词的长度比字典中的单词短1,同样检查它们是否只有一个字符不同。
    • 如果长度相等,检查它们是否只有一个字符不同。
  10. 如果在上述检查中发现只有一个字符不同,将该字典中的单词输出。

  11. 最后,输出一个换行符,结束Check函数。

  12. main函数在读取完所有待检测单词并调用Check函数后结束。

需要注意的是,代码中存在一些错误和不足之处,例如:

  • scanf函数的参数应该是字符串数组的地址,而不是直接使用数组名。
  • Check函数中,b.length应该是b.length而不是b.length
  • 代码中的嵌套循环可能会导致性能问题,特别是在处理大量数据时。
  • 代码没有考虑单词中可能包含特殊字符或空格的情况。
更专业一些
转笔记
专业
#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++程序中字符串比较的方法
如何使用C++标准库iostream
C++中结构体数组的使用方法
在线客服