回 帖 发 新 帖 刷新版面

主题:判断回文字符串,得不到想要的结果,思考了好久找不到解决的方法

#include<malloc.h>
#include<stdio.h>

#define MAXSIZE 100
//定义栈结构体
typedef struct
{
    char str1[MAXSIZE];
    int top;
}Stack, *PStack;

//栈的初始化
PStack Init_Stack()
{
    PStack S;
    S = (PStack)malloc(sizeof(Stack));
    if (S)
    {
        S->top = -1;
    }
    
    return S;
}

//判断栈空
int Empty_Stack(PStack S)
{
    if (S->top == -1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//入栈
int Push_Stack(PStack S, char ch)
{
    if (S->top = MAXSIZE-1)
    {
        return 0;//栈满不能入栈
    }
    else
    {
        S->top++;
        S->str1[S->top] = ch;
        return 1;
    }
}

//出栈
char Pop_Stack(PStack S)
{
    char ret;
    if (Empty_Stack(S))
    {
        return 0;
    }
    else
    {
        ret = S->str1[S->top];
        S->top--;
        return ret;
    }
}

//定义队列结构体
typedef struct
{
    char str2[MAXSIZE];
    int head, tail;
    int length;
}Queue, *PQueue;

//队列初始化
PQueue Init_Queue()
{
    PQueue Q;
    Q = (PQueue)malloc(sizeof(Queue));
    if (Q)
    {
        Q->head = Q->tail = 0;
        Q->length = 0;
    }
    
    return Q;
}

//判断队列是否为空
int Empty_Queue(PQueue Q)
{
    if (Q->length == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//入队
int In_Queue(PQueue Q, char ch)
{
    if (Q->length == MAXSIZE)
    {
        return 0;//队列满不能入队
    }
    else
    {
        Q->tail++;
        Q->str2[Q->tail] = ch;
        Q->length++;
        return 1;
    }
}

//出队
char Out_Queue(PQueue Q)
{
    char ret;
    if (Empty_Queue(Q))
    {
        return 0;
    }
    else
    {
        Q->head++;
        ret = Q->str2[Q->head];
        Q->length--;
        return ret;
    }
}
 
int main()
{
    PStack s;
    PQueue q;
    int i = 0, count;
    char ch;
    s = Init_Stack();
    q = Init_Queue();
    printf("Please input a string(0 to end):");
    while ((ch = getchar()) != '@')
    {
        Push_Stack(s, ch);
        In_Queue(q, ch);
    }
    count = q->length;
    printf("%d\n",count);
    while (!Empty_Stack(s) && Pop_Stack(s) == Out_Queue(q))
    {
        i++;//这句执行了没有???
    }
    printf("%d\n",i);//这里的i为什么一直是0
    if (i == count)
    {
        printf("Is palindrome!\n");
    }
    else
    {
        printf("Is not palindrome!\n");
    }
    return 0;
}

回复列表 (共7个回复)

沙发

简单的问题何必这么复杂......

[code=c]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 200

int main()
{
    char *str,*vstr;
    int i=0;

    str = (char *)malloc(MAX*sizeof(char));
    vstr = (char *)malloc(MAX*sizeof(char));

    vstr += MAX-1;
    *vstr-- = 0;

    printf("Put string:  ");

    if (gets(str)!=NULL)
    {
        while((*vstr-- = str[i++]) != 0);

        if (strcmp(vstr+2,str)==0)
            printf("Is palindrome!\n");
        else
            printf("Is not palindrome!\n");
    }
    else
        printf("Alloc str error!\n");

    return 0;
}
[/code]

板凳

"C++" + "STL"版 

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

bool is_palindrome(const string &s)
{
    return equal(s.begin(), s.end(), s.rbegin());
}

int main()
{
    string s = "123321";
    if(is_palindrome(s))
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    return 0;
}

3 楼

LZ你的Pop_Stack(s) == Out_Queue(q)写的有问题,几乎每次条件都为FALSE!所以每次i++都没有执行

4 楼


是觉得有些问题,但是没有找出到底是什么原因。难道出栈和出队函数有写错吗?
还是搞不清楚,望指教,谢谢!

5 楼

知道有简单的方法,这所以这样写不是为了判断一个回文字符串,而是想熟悉站和队列的应用。不理解.....

6 楼

//入栈
int Push_Stack(PStack S, char ch)
{
    if (S->top = MAXSIZE-1)
    {
        return 0;//栈满不能入栈
    }
    else
    {
        S->top++;
        S->str1[S->top] = ch;
        return 1;
    }
}


看看是不是“if (S->top = MAXSIZE-1)”这句写错了导致那样的结果?

7 楼

#include<malloc.h>
#include<stdio.h>
#include <stdlib.h>

#define MAXSIZE 100
//定义栈结构体
typedef struct
{
    char *str1;
    int top;
}Stack, *PStack;

//栈的初始化
void Init_Stack(Stack &S)
{
    S.str1 = (char *)malloc(MAXSIZE);
    if(!S.str1) exit(1);
    S.top = 0;
}

//判断栈空
bool Empty_Stack(Stack S)
{
    if (S.top == 0)
    {
        return 1;
    }    

    return 0; 
}

//入栈
bool Push_Stack(Stack &S, char ch)
{
    if (S.top == MAXSIZE-1)
    {
        return 0;//栈满不能入栈
    }
      
    S.str1[S.top] = ch;
    ++S.top;
    return 1; 
}

//出栈
char Pop_Stack(Stack &S)
{
    char ret;
    if (Empty_Stack(S))
    {
        return 0;
    }
    
    ret = S.str1[S.top - 1];
    S.top--;
    return ret;
}
这个是最大限度符合你的思路重写的stack!

我来回复

您尚未登录,请登录后再回复。点此登录或注册