| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖
标题:快帮我看一下,我的回文哪错了
只看楼主 加入收藏
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
结帖率:70.59%
收藏
已结贴  问题点数:5 回复次数:8 
快帮我看一下,我的回文哪错了
我想用栈和链表实现回文的检查,但始终有个语法错误,还有算法上好像有点错,请大家帮我一下!!!


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
struct M
{
    char*top;
    char*base;
    int size;
};
struct list
{
    char data;
    struct list*next;
};
void init(struct M*n);
void push(struct M*m,char c);
void pop(struct M*m,char*e);

void main()
{
    struct list*p1,*p2,*head;
    struct M sq;
    char ch,e;
    init(&sq);
    head=(struct list*)malloc(sizeof(struct list));
    head=NULL;
    p2=head;
    while((ch=getchar())!='\n')
    {
        push(&sq,ch);
        p1=(struct list*)malloc(sizeof(struct list));
        p1->data=ch;
        p1->next=p2->next;
        p2->next=p1;
        p2=p1;
    }
    p1=head->next;
    pop(&sq,&e);
    while(p1!=NULL)
    {
        if(strcmp(e,p1->data)==0)           显示'strcmp' : cannot convert parameter 1 from 'char' to 'const char *',这是什么意思
        {    p1=p1->next;
        pop(&sq,&e);
        }
        else {
            
            printf("不是回文\n");
            exit(0);
        }
    }
    printf("是回文!\n");
}
void init(struct M*n)
{
    n->base=n->top=(char*)malloc(N*sizeof(char));
    if(!n->base)
    {printf("cant creat!\n");
    exit(0);
    }
    n->top=n->base;
    n->size=N;
}

void push(struct M*m,char c)
{
    if((m->top-m->base)==m->size)
        printf("stack full\n");
    else
        *m->top++=c;
}

void pop(struct M*m,char*e)
{
   
    if(m->top==m->base)
    {
        printf("栈空!\n");
        exit(0);
    }
    else
        *e=*--m->top;
}




我想用栈和链表实现回文的检查,但始终有个语法错误,还有算法上好像有点错,请大家帮我一下!!!
搜索更多相关主题的帖子: 回文 
2010-11-14 22:00
zghnxzdcx
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:550
专家分:1176
注 册:2010-4-6
收藏
得分:0 
自己先把程序加上逐句的注释,加上之后你就能轻松的找到错误了

你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
2010-11-14 22:52
loveminttea
Rank: 3Rank: 3
来 自:河南科技学院
等 级:论坛游侠
帖 子:95
专家分:146
注 册:2010-10-14
收藏
得分:0 
不懂...
2010-11-15 17:33
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
struct M
{
    char*top;
    char*base;
    int size;
};
struct list
{
    char data;
    struct list*next;
};
void init(struct M*n);
void push(struct M*m,char c);
void pop(struct M*m,char*e);

void main()
{
    struct list*p1,*p2,*head;
    struct M sq;
    char ch,e;
    init(&sq);
    head=(struct list*)malloc(sizeof(struct list));
    //head=NULL;                             //要去掉
    p2=head;
    while((ch=getchar())!='\n')
    {
        push(&sq,ch);
        p1=(struct list*)malloc(sizeof(struct list));
        p1->data=ch;
        p1->next=p2->next;
        p2->next=p1;
        p2=p1;
    }
    p1=head->next;
    pop(&sq,&e);
    while(p1!=NULL)
    {
        if(e==p1->data)          // strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
        {    p1=p1->next;
        pop(&sq,&e);
        }
        else {
           
            printf("不是回文\n");
            exit(0);
        }
    }
    printf("是回文!\n");
}
void init(struct M*n)
{
    n->base=n->top=(char*)malloc(N*sizeof(char));
    if(!n->base)
    {printf("cant creat!\n");
    exit(0);
    }
    n->top=n->base;
    n->size=N;
}

void push(struct M*m,char c)
{
    if((m->top-m->base)==m->size)
        printf("stack full\n");
    else
        *m->top++=c;
}

void pop(struct M*m,char*e)
{
   
    if(m->top==m->base)
    {
        printf("栈空!\n");
        exit(0);
    }
    else
        *e=*--m->top;
}

If You Want Something, Go Get It, Period.
2010-11-15 17:53
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 4楼 m21wo
首先谢谢你的解答!
能告诉我p1=NULL,为什么不对吗?
还有我用strcmp比较的就是char不是数啊?
2010-11-15 22:31
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:2 
strcmp 比较的是字符串啊!!!参数是字符指针 你没看啊!
你先申请p1的内存,怎么又置空啊!那不是p1又找不到内存了吗?

If You Want Something, Go Get It, Period.
2010-11-15 22:35
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 6楼 m21wo
那你告述我下面这个又为什么对啊!!!
a,b不都是指向字符串的指针吗??


#include<stdio.h>
#include<string.h>
int main()
{
    char a[]="abc";
    char b[]="ab";
    if(strcmp(a,b)==0){
        printf("a=b\n");
    }
    else{
        printf("a!=b\n");
    }
}
2010-11-16 12:52
niufujun
Rank: 2
等 级:论坛游民
帖 子:16
专家分:37
注 册:2009-4-25
收藏
得分:0 
#include<stdio.h>
#include<string.h>
int main()
{
    char a[]="abc";
    char b[]="ab";
    if(strcmp(a,b)==0){
        printf("a=b\n");
    }
    else{
        printf("a!=b\n");
    }
} 比较的是存放在数组中的字符串,而 char ch,e;e为字符。

[ 本帖最后由 niufujun 于 2010-11-16 14:18 编辑 ]
2010-11-16 13:45
niufujun
Rank: 2
等 级:论坛游民
帖 子:16
专家分:37
注 册:2009-4-25
收藏
得分:3 
一个字符串可以由字符常量,char数组,char指针,字符串数组来定义,但char e;就不是字符串。
2010-11-16 14:22
快速回复:快帮我看一下,我的回文哪错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013481 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved