称正读和反读都相同的字符序列为“回文”,例如,“abcddcba”、“qwerewq”是回文,“ashgash”不是回文。试写一个算法判断读入的一个以‘@’为结束符的字符序列是否为回文。
不知道为什么永远是不是回文,有没有知道哪里出问题了.
头文件如下
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define m 100
typedef struct FIFO
{
char se[m] = {};
int front = 0;
int rear = 0;
};
void In_Queue(FIFO A, char a);
char Out_Queue(FIFO A, int a);
int Empty_Queue(FIFO A);
#ifdef __cplusplus
}
#endif
代码文件
#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_NONSTDC_NO_DEPRECATE 1//strupr等不安全函数
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include"tou.cpp"
using namespace std;
void In_Queue(FIFO A, char a)
{
if (A.front = A.rear && A.se[A.front + 1] != NULL)
{
cout << "队满" << endl;
return;
}
else
{
A.se[A.rear] = a;
A.rear++;
A.rear = A.rear % m;
return;
}
}
char Out_Queue(FIFO A, int a)
{
return A.se[a];
A.se[a] = -1;
}
int Empty_Queue(FIFO A)
{
if (A.front = A.rear && A.se[A.front + 1] != NULL)
{
cout << "队满" << endl;
return -1;
}
else
{
return 0;
}
}
主文件
#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_NONSTDC_NO_DEPRECATE 1//strupr等不安全函数
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include"tou.cpp"
using namespace std;
int main(void)
{
//写入字符串
FIFO A;
char input = NULL;
while (input != '@')
{
cin >> input;
cout << input;
In_Queue(A, input);
}
//判断是否为回文
int a; char i; char j;
while ((a = Empty_Queue(A)) != -1)
{
while (A.se[A.front] == NULL || A.se[A.front] == '@')
{
A.front++;
}
while (A.se[A.rear] == NULL || A.se[A.rear] == '@')
{
A.rear--;
}
i = Out_Queue(A, A.front);
j = Out_Queue(A, A.rear);
A.front++;
A.rear--;
if (i != j)
{
cout << "不是回文符" << endl;
return 0;
}
if (A.front == A.rear)
{
break;
}
}
cout << "是回文符" << endl;
return 0;
}
汇总了一下:
1、while (input != '@') 这里判断上一轮循环输入的字符,@已经入了队列,没丢掉,改成input = getchar(),循环里面的cin >> input;不再需要
2、In_Queue、Out_Queue、Empty_Queue这3个方法传FIFO的指针,不然影响不了它的值
3、判断空队、满队,现有的有问题,先简化成这样:空队:A->front == A->rear、满队:A->rear > m
4、A->rear是放入一个数之后+1,开始判断回文前,先将A->rear-1,才能取到最后一个输入值
5、判断回文的循环里面,前两个循环不需要,你后面的判断,就是取依次从队列前面和从队列后面取每个字符进行比较
6、不影响结果的:FIFO是先进先出,你这从两端取
作为一名语言模型AI,我没有实际的编程能力,无法运行或检测代码是否可以输出正确结果。关于判断回文算法是否考虑了空字符,我也没有足够的背景信息,无法给出确切答案。如果您能够提供更多的上下文或代码信息,我将尽力给出相关建议和解决方案。