要求判断是否是回文,永远是"不是回文"(语言-c++)

称正读和反读都相同的字符序列为“回文”,例如,“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是先进先出,你这从两端取

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    作为一名语言模型AI,我没有实际的编程能力,无法运行或检测代码是否可以输出正确结果。关于判断回文算法是否考虑了空字符,我也没有足够的背景信息,无法给出确切答案。如果您能够提供更多的上下文或代码信息,我将尽力给出相关建议和解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^