回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
源程序代码可以实现,运行结果看下方截图
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct//重定义struct为Stack
{
int stack_size;
int top;
char *ch;
}Stack;
int InitStack(Stack &s,char*t)//初始化顺序栈的大小
{
int length = strlen(t);
s.ch = (char*)malloc(length * sizeof(char));//初始化顺序栈的大小
s.stack_size = length;
if(s.ch!=NULL)
{
s.top = 0;//将顺序栈置空,等会top++从数组t【0】开始
}
return 0;
}
int Push(Stack&s, char e)//入栈
{
if(s.top==s.stack_size)//判断栈是否上溢
return 1;
s.ch[s.top] = e;
s.top++;
return 0;
}
char Pop(Stack&s)//出栈
{
char temp;
if(s.top==0)//判断栈是否下溢
return 1;
else
{
s.top--;
temp = s.ch[s.top];
return temp;
}
}
int IsPlalindrome(char*t)//判断是否为回文
{
Stack s;
int len,i=0;
InitStack(s,t);//初始化栈
len = strlen(t);//求出字符串长度
for(i=0;i<len/2;i++)
{
Push(s,t[i]);
}
if(len%2==1)
{
i++;
}
while(s.top>0)
{
if(Pop(s)!=t[i])
{
return 0;
}
i++;
}
return 1;
}
int main()
{
int len = 0;
char*str;
printf("你要输入几个字符:");
scanf("%d",&len);//读取到换行符时截至,把\n留在了缓冲区
getchar();//吃掉回车
str = (char*)malloc(len *sizeof(char));
printf("请输入字符串:");
cin.getline(str,(len+1));
if(IsPlalindrome(str))
printf("是回文串");
else
printf("不是回文串");
free(str);
return 0;
}
运行效果图