1.判断字符串是否符合“x1x2…xn&xn…x2x1#”的对称模式
#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
//定义链栈
typedef struct SNode
{
char data;
SNode* next;
}*LStack;
//栈的初始化
void zhaninit(LStack &S)
{
S=NULL;
}
//入栈
void push(LStack &S,char e)
{
LStack q;
q=new SNode;
q->data=e;
q->next=S;
S=q;
}
//出栈
bool pop(LStack &S,char &e)
{
LStack q;
if(!S)
{
return false;
}
e=S->data;
q=S;
S=S->next;
delete q;
return true;
}
//判断栈空
bool zhankong(LStack &S)
{
if(S==NULL)
{
return true;
}
else
{
return false;
}
}
//判断回文串
bool panduan(LStack &S)
{
char jinzhanelem;
char chuzhanelem;
int flag;
flag=1;
while(1)
{
jinzhanelem=getchar();
//cin>>jinzhanelem;
if(jinzhanelem=='&')
{
flag=0;
}
else if(jinzhanelem=='#')
{
getchar();
break;
}
else if(flag)
{
push(S,jinzhanelem);
}
else if(!pop(S,chuzhanelem)||chuzhanelem!=jinzhanelem)
{
return false;
}
}
if(!flag)
{
return zhankong(S);
}
else
{
return !flag;
}
}
int main()
{
printf("输入您要判断的串:\n");
LStack S;
zhaninit(S);
if(panduan(S))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
2.括号匹配检验
#include<stdio.h>
#include <bits/stdc++.h>
#define N 1000
//定义链栈
typedef struct SNode
{
char data;
SNode* next;
}*LStack;
//栈的初始化
void zhaninit(LStack &S)
{
S=NULL;
}
//入栈
void push(LStack &S,char e)
{
LStack q;
q=new SNode;
q->data=e;
q->next=S;
S=q;
}
//出栈
bool pop(LStack &S,char &e)
{
LStack q;
if(!S)
{
return false;
}
e=S->data;
q=S;
S=S->next;
delete q;
return true;
}
//判断栈空
bool zhankong(LStack &S)
{
if(S==NULL)
{
return true;
}
else
{
return false;
}
}
//判断回文串
bool panduan(char x[])
{
LStack S;
zhaninit(S);
int i;
char zifu1,zifu2;
for(i=0;x[i]!=0;i++)
{
zifu1=x[i];
if(zifu1=='('||zifu1=='['||zifu1=='{')
{
push(S,zifu1);
}
else if(zifu1==')')
{
if(!pop(S,zifu2)||zifu2!='(')
{
return false;
}
}
else if(zifu1==']')
{
if(!pop(S,zifu2)||zifu2!='[')
{
return false;
}
}
else if(zifu1=='}')
{
if(!pop(S,zifu2)||zifu2!='{')
{
return false;
}
}
}
return zhankong(S);
}
int main()
{
int length;
char x[N];
int i;
printf("请输入您要判断的串的长度:\n");
scanf("%d",&length);
getchar();
printf("输入您要判断的串:\n");
for(i=0;i<length;i++)
{
scanf("%c",&x[i]);
printf("%c\n",x[i]);
}
/*
for(i=0;i<length;i++)
{
printf("%c",x[i]);
}
*/
if(panduan(x))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}