#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 18:21:34 浏览: 137
这段代码存在一个逻辑错误,导致无法输出结果。具体原因是在比较每个单词与用户输入单词是否匹配时,当匹配失败时,程序会进入一个 for 循环来查找与用户输入单词差别最小的单词,但是在 for 循环中,程序对 cnt 变量的赋值操作放在了循环体内,导致循环只会执行一次,即只查找单词库中的第一个单词,而不会遍历整个单词库。因此,程序无法找到差别最小的单词,也就无法输出任何结果。要修复这个问题,应该将 cnt 变量的赋值操作放在 for 循环外部,确保循环能够遍历整个单词库。
相关问题
顺序表插入操作 #include<iostream> using namespace std; #
顺序表插入操作是指在顺序表的第i个位置插入元素e,并将原来位于第i个位置及其之后的元素都后移一个位置。具体实现可以使用一个循环将第i个位置及其之后的元素后移,然后将元素e插入到第i个位置。以下是一个C++实现的示例代码:
```
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype *elem;
int length;
} SqList;
int ListInsert_Sq(SqList &L, int i, datatype e) {
if ((i < 1) || (i > L.length + 1)) {
return ERROR;
}
if (L.length >= MAXSIZE) {
return ERROR;
}
for (int j = L.length; j >= i; j--) {
L.elem[j] = L.elem[j - 1];
}
L.elem[i - 1] = e;
L.length++;
return OK;
}
```
--相关问题--:
帮我用c++语言完善下列程序, #include <iostream> using namespace std; #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node; typedef struct { Node *front; Node *rear; }LinkQueue; void InitQueue( LinkQueue &Q ) {//初始化带头结点的空队列 } Status EnQueue( LinkQueue &Q,ElemType x) {// 入队 } Status DeQueue( LinkQueue &Q,ElemType ) {// 出队 } bool QueueEmpty(LinkQueue &Q) {//判队空 } void DestroyListQueue(LinkQueue &Q) {//销毁队列 }
完善后的程序如下:
```
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} LinkQueue;
void InitQueue(LinkQueue &Q) {//初始化带头结点的空队列
Q.front = Q.rear = new Node;
Q.front->next = NULL;
}
Status EnQueue(LinkQueue &Q, ElemType x) {// 入队
Node *p = new Node;
if (!p) {
return ERROR;
}
p->data = x;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(LinkQueue &Q, ElemType &x) {// 出队
if (Q.front == Q.rear) {
return ERROR;
}
Node *p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
Q.rear = Q.front;
}
delete p;
return OK;
}
bool QueueEmpty(LinkQueue &Q) {//判队空
return Q.front == Q.rear;
}
void DestroyListQueue(LinkQueue &Q) {//销毁队列
while (Q.front) {
Node *p = Q.front;
Q.front = Q.front->next;
delete p;
}
Q.rear = NULL;
}
```
在这个程序中,我们实现了一个带头结点的链式队列。其中,函数 `InitQueue` 用于初始化队列,函数 `EnQueue` 用于将元素入队,函数 `DeQueue` 用于将元素出队,并返回出队元素的值,函数 `QueueEmpty` 用于判断队列是否为空,函数 `DestroyListQueue` 用于销毁队列。