试编写一个算法,判断一次读入的一个以@结束符的字母序列是否为形容序’列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);//将栈放空 }