鱼C论坛

 找回密码
 立即注册
查看: 1713|回复: 1

[已解决]c语言 用栈判断字符串是否回文 新手求救!!

[复制链接]
发表于 2020-10-24 15:23:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h> 
#define MaxSize 100
typedef int ElemType;
typedef struct
{        ElemType data[MaxSize];
        int top; 
 }SqStack;
 
//初始化栈运算算法
void InitStack(SqStack &st)
{        
        st.top=-1; 
 } 
 
//销毁栈运算算法 
void DestroyStack(SqStack st)
{
 }
 
//进栈运算算法
int Push(SqStack &st,ElemType x)
{        if(st.top==MaxSize-1)                        //栈满上溢出返回0 
                return 0;
        else
        {        st.top++;
                st.data[st.top]=x;
                return 1;                                        //成功进栈返回1 
        }
 } 

//出栈运算算法
int Pop(SqStack &st,ElemType &x)         //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0 
                return 0;
        else
        {        x=st.data[st.top];
                st.top--;                                        //成功出栈返回1 
                return 1;
        }
 } 
 
//取栈顶元素运算算法
int GetTop(SqStack st,ElemType &x)        //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0 
                return 0;
        else
        {        x=st.data[st.top];
                return 1;                                        //成功取栈项返回1 
        }
 } 
 
//判断栈空运算算法
int StackEmpty(SqStack st)
{        if(st.top==-1)return 1;                        //栈空返回1 
        else return 0;                                        //栈不空返回0 
 } 
 
int Palindrome(char str[],int n)
 {
         SqStack st;
         InitStack(st);
         int i;
         int ch;
         for(i=0;i<n;i++)
                 Push(st,str[i]);
         i=0;
         while(!StackEmpty(st))
         {
                 Pop(st,ch);
                 if(ch!=str[i++])
                 {
                         DestroyStack(st);
                         return 0;
                 }
         }
        DestroyStack(st);
         return 1;
  } 
int main(){
        printf("输入一个字符串:\n");
        char str[81];
        int n;
        int flag;
        scanf("%d",&n);
        flag=Palindrome(str,n);
        if (flag)
    {
        printf("字符串是回文");
    }
    else
        {
                printf("字符串不是回文");
    }
    return 0;
} 
 
程序可以运行但是结果有问题
最佳答案
2020-10-24 17:33:27
主函数那里有点问题
#include<stdio.h>
#include<stdlib.h> 
#define MaxSize 100
typedef int ElemType;
typedef struct
{        ElemType data[MaxSize];
        int top; 
 }SqStack;
 
//初始化栈运算算法
void InitStack(SqStack &st)
{        
        st.top=-1; 
 } 
 
//销毁栈运算算法 
void DestroyStack(SqStack st)
{
 }
 
//进栈运算算法
int Push(SqStack &st,ElemType x)
{        if(st.top==MaxSize-1)                        //栈满上溢出返回0 
                return 0;
        else
        {        st.top++;
                st.data[st.top]=x;
                return 1;                                        //成功进栈返回1 
        }
 } 

//出栈运算算法
int Pop(SqStack &st,ElemType &x)         //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0 
                return 0;
        else
        {        x=st.data[st.top];
                st.top--;                                   //成功出栈返回1 
                return 1;
        }
 } 
 
//取栈顶元素运算算法
int GetTop(SqStack st,ElemType &x)        //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0 
                return 0;
        else
        {        x=st.data[st.top];
                return 1;                                        //成功取栈项返回1 
        }
 } 
 
//判断栈空运算算法
int StackEmpty(SqStack st)
{        if(st.top==-1)return 1;                        //栈空返回1 
        else return 0;                                        //栈不空返回0 
 } 
 
int Palindrome(char str[],int n)
 {
         SqStack st;
         InitStack(st);
         int i;
         int ch;
         for(i=0;i<n;i++)
                 Push(st,str[i]);
         i=0;
         while(!StackEmpty(st))
         {
                 Pop(st,ch);
                 if(ch!=str[i++])
                 {
                         DestroyStack(st);
                         return 0;
                 }
         }
        DestroyStack(st);
         return 1;
  } 
int main(){
        printf("输入一个字符串长度:\n");
        char str[81];
        int n;
        int flag;
        scanf("%d",&n);
        getchar();  // 缓冲输入的回车符 
        printf("输入%d个字符:\n",n);
        gets(str); 
        flag=Palindrome(str,n);
        if (flag)
    {
        printf("字符串是回文");
    }
    else
        {
                printf("字符串不是回文");
    }
    return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-24 17:33:27 | 显示全部楼层    本楼为最佳答案   
主函数那里有点问题
#include<stdio.h>
#include<stdlib.h> 
#define MaxSize 100
typedef int ElemType;
typedef struct
{        ElemType data[MaxSize];
        int top; 
 }SqStack;
 
//初始化栈运算算法
void InitStack(SqStack &st)
{        
        st.top=-1; 
 } 
 
//销毁栈运算算法 
void DestroyStack(SqStack st)
{
 }
 
//进栈运算算法
int Push(SqStack &st,ElemType x)
{        if(st.top==MaxSize-1)                        //栈满上溢出返回0 
                return 0;
        else
        {        st.top++;
                st.data[st.top]=x;
                return 1;                                        //成功进栈返回1 
        }
 } 

//出栈运算算法
int Pop(SqStack &st,ElemType &x)         //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0 
                return 0;
        else
        {        x=st.data[st.top];
                st.top--;                                   //成功出栈返回1 
                return 1;
        }
 } 
 
//取栈顶元素运算算法
int GetTop(SqStack st,ElemType &x)        //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0 
                return 0;
        else
        {        x=st.data[st.top];
                return 1;                                        //成功取栈项返回1 
        }
 } 
 
//判断栈空运算算法
int StackEmpty(SqStack st)
{        if(st.top==-1)return 1;                        //栈空返回1 
        else return 0;                                        //栈不空返回0 
 } 
 
int Palindrome(char str[],int n)
 {
         SqStack st;
         InitStack(st);
         int i;
         int ch;
         for(i=0;i<n;i++)
                 Push(st,str[i]);
         i=0;
         while(!StackEmpty(st))
         {
                 Pop(st,ch);
                 if(ch!=str[i++])
                 {
                         DestroyStack(st);
                         return 0;
                 }
         }
        DestroyStack(st);
         return 1;
  } 
int main(){
        printf("输入一个字符串长度:\n");
        char str[81];
        int n;
        int flag;
        scanf("%d",&n);
        getchar();  // 缓冲输入的回车符 
        printf("输入%d个字符:\n",n);
        gets(str); 
        flag=Palindrome(str,n);
        if (flag)
    {
        printf("字符串是回文");
    }
    else
        {
                printf("字符串不是回文");
    }
    return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表