试编写一个算法,判断一次读入的一个以@结束符的字母序列是否为形容序’列1&序列2‘模式的字符序列。其中序列1 和序列2都不含字符&且序列2是序列1的你序列。列入,“a+b&b+a”时属于该模式的字符序列,而”1+3&3-1“不是
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct//使用栈
{char a[10];
int tap;
}seqstack;
seqstack *p;
void fanxiang(char *q,char *h,char a[10],char b[10]);
void compare(char a[10],char b[10]);
int main()
{char a[10];
char b[10];
char *q;
char *h;
p=(seqstack *)malloc(sizeof(seqstack));
memset(a,0,sizeof(a));//对a和b初始化
memset(b,0,sizeof(b));
fanxiang(q,h,a,b);
compare(a,b);
}
void compare(char a[10],char b[10])
{
int i=0,j=1;int flog=0;//flog 为判断标志是否相同
while(a[i]!='@')
{if(a[i]==b[j])
{flog++;
i++;
j++;}
else
{flog=-1;
printf("不是回文序列");
break;//不是回文序列直接跳出
}
}
if(flog>0)
printf("是回文序列");
}
void fanxiang(char *q,char *h,char a[10],char b[10])
{int i=0;
p->tap=0;
q=a;//标记a
scanf("%c",q);//输入字符
for(;*q!='@';)
{q++;
scanf("%c",q);}
q=a;
h=b;
if(*q=='@')
printf("error");
else
{
while(*q!='@')
{p->a[p->tap ]=*q;//输入a进入栈
q++;
p->tap++;
}
p->a[p->tap ]='@';
}
while(p->tap>=0 )//利用栈的特性输出进入b
{b[i]=p->a[p->tap ];
i++;
p->tap--; }
free(p);//将栈放空
}