为了账号安全,请及时绑定邮箱和手机立即绑定

如何判断回文?

如何判断回文?

C++
我有没有告诉你 2016-10-22 11:08:16
求大神帮忙,  假设称正读和反读都相同的字符序列为”回文”,试写一个算法判别读入的一个以’@’为结束符的字符序列是否是“回文”。用c++编写,跪求完整代码
查看完整描述

1 回答

?
望远

TA贡献1017条经验 获得超1032个赞

#include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef char ElemType;
typedef struct linknode
{
	ElemType data;
	struct linknode *next;
}LiStack;
//初始化链栈
LiStack InitStack(LiStack *s)
{
	s=(LiStack *)malloc(sizeof(LiStack));
	s->next=NULL;
	return *s;
}
//出栈
ElemType pop(LiStack *s,ElemType *e)
{
	LiStack *p;
	if(s->next==NULL)
	{
		return false;
	}
	p=s->next;
	*e=p->data;
	s->next=p->next;
	free(p);
	return *e;
}
//入栈
void push(LiStack *s,ElemType e)
{
	LiStack *p=(LiStack *)malloc(sizeof(LiStack));
	p->data=e;
	p->next=s->next;
	s->next=p;
}
//判断是否是回文序列
bool Match(LiStack *l,char str[],int length)
{
	char c;
	int i;
	bool flag=true;
	for(i=0;i<length;i++)
	{
		if(str[i]!=pop(l,&c))
		{
			flag=false;
			break;

		}

	}
	printf("\n");
	return flag;

}
void main()
{
	LiStack l;
	int i=0,length;
	char str[MAX],c;
	l=InitStack(&l);
	printf("请输入一行字符串以@结尾:\n");
	scanf("%c",&c);
	while(c!='@')
	{
		if(c!='\0'&&c!='\n')
		{
			str[i++]=c;
			push(&l,c);
		}
		scanf("%c",&c);
	
	}
	str[i]='\0';
	length=i/2;
	if(Match(&l,str,length))
	{
		printf("是回文序列!!\n");
	}
	else
	{
		printf("不是回文序列!!\n");
	}

}

运行结果:

//img1.sycdn.imooc.com//580b0df80001c15f02740137.jpg

刚好实验报告就是这个,不过是用c语言写的,哈哈~~

查看完整回答
反对 回复 2016-10-22
  • 1 回答
  • 0 关注
  • 1668 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信