使用数组的C palindrome程序

c++ palindrome program using array

本文关键字:palindrome 程序 数组      更新时间:2023-10-16

我对我的palindrome程序有问题。我需要使用数组,并展示不用.push或.pop的推动和弹出率如何工作。我遇到的麻烦是,当我输入一个三个字母的单词时,它会说是的,这是一个回文,但是如果我输入一个4个或更多字符的单词,即使是四个或更多字符,也不会说这不是一个。前任。皮艇。看不到我出错的地方。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    char original[13];
    int stkptr=-1;
    int x = strlen(original)-1;

    cout <<"Enter a character"<<endl;
    for( ++stkptr ; stkptr<13;stkptr++)
    //store user input into the array
    {
        cin>>original[stkptr];
        if(original[stkptr]=='0')
            break;
        cout<<original[stkptr]<<"  Stack pointer is: "<<stkptr<<endl;

    }
    //POP
    for (--stkptr; stkptr>=0;stkptr--)
        cout<<original[stkptr]<<" Stack pointer is: "<<stkptr<<endl;

    for(int i = 0; i <= x; i++)
    {
        if (original[i] == original[x-i])
        {
            continue;
        }
        else
        {
            cout<<"nNot a palidromen"<<endl;
            system("pause");
            return 0;
        }
    }
    cout << "nIndeed Palidromen"<<endl;
    system("pause");
    return 0;
}   

尽管您过于复杂逻辑,但我会说出当前代码是什么。

您出错了x。当没有"字符串"时,您将其初始化为字符串长度(另外,您的char数组应该在末端具有 ,以使strlen()工作)。在pop之前将stkptr-1分配给x并删除pop

,在您的循环中,您只能迭代到阵列的一半,因为您从开始和结尾进行比较

for(int i = 0; i <= x/2; i++)
bool checkIsPalindrome(string s){
    int nLength = s.length();
    string s1, s2;
    if(nLength & 1) // is Odd
        nLength--;
    nLength = nLength/2;
    //take the first half
    s1 = s.substr(0,nLength);
    //pop off the last half of characters into the string
    for(int i = s.length()-1; i > nLength; i--)
       s2+= s.at(i);
    if(s1 == s2)
        return true;
    else
        return false;
}