You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义栈实现字符串反转检测回文时输出乱码问题排查

回文字符串检测程序问题修复

存在的核心问题

  • 自定义栈的push方法逻辑倒置:未将传入字符存入栈数组,反而将未初始化的栈数组值赋值给输入参数,导致栈内无有效数据
  • 栈的pop方法使用了未定义变量l,且返回值错误,应该返回弹出前的栈顶字符
  • 栈的getTop方法功能错误:当前返回栈顶索引,实际应该返回栈顶存储的字符
  • 反转函数逻辑混乱:存在letters[-1]的越界访问,且错误重复调用push打乱栈结构,未将栈弹出的字符存入结果数组
  • 自定义字符串长度计算函数逻辑冗余,嵌套循环无意义,长度计算结果异常

修复后完整代码

#include <iostream>
#include <string>
using namespace std;
#define Max 100000
class Stack {
private:
    int top = -1;
    char letters[Max];
public:
    void setTop(int t) {
        top = t;
    }
    // 修复getTop:返回栈顶字符而非索引
    char getTop() {
        if (!isEmptyStack()) {
            return letters[top];
        }
        return '\0';
    }
    bool isEmptyStack() {
        return top == -1;
    }
    // 修复push:将传入字符存入栈
    void push(char x, int s) {
        if (top != s - 1) {
            top++;
            letters[top] = x;
        }
    }
    // 修复pop:正确返回弹出的字符
    char pop() {
        if (!isEmptyStack()) {
            char temp = letters[top];
            top--;
            return temp;
        }
        return '\0';
    }
};
// 修复反转逻辑
void reverse(char input[], char output[], int size, Stack& stack) {
    // 先把所有字符压入栈
    for (int i = 0; i < size; i++) {
        stack.push(input[i], Max);
    }
    int i = 0;
    // 弹出栈顶字符存入输出数组
    while (!stack.isEmptyStack()) {
        output[i] = stack.pop();
        i++;
    }
    // 给输出加字符串结束符避免乱码
    output[size] = '\0';
    cout << "反转结果:" << output << endl;
}
// 修复字符串长度计算逻辑
int myStringLength(const char* letter) {
    int c = 0;
    while (letter[c] != '\0') {
        c++;
    }
    return c;
}
int main() {
    Stack stack;
    string w;
    cout << "Enter a Word: ";
    getline(cin, w);
    char* letters = &w[0];
    cout << "输入内容:" << letters << endl;
    int size = myStringLength(letters);
    // 定义存储反转结果的数组
    char reversed[Max];
    reverse(letters, reversed, size, stack);
    // 后续加回文判断即可:strcmp(letters, reversed) == 0 则为回文
    return 0;
}

验证效果

输入food时,程序会输出反转结果doof,符合预期,后续只需添加原串与反转串的相等判断即可完成回文检测功能。

内容的提问来源于stack exchange,提问作者supercar lover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:57:04