用栈实现回文字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
#include<iostream>
#include<string>
using namespace std;
typedef struct
{
char data[101];
int top;
}SqStack;
void InitStack(SqStack &S)
{
S.top=-1;
}
void Push(SqStack &S, char e)
{
S.data[++S.top]=e;
}
void Pop(SqStack &S, char &e)
{
e=S.data[S.top--];
}
int main()
{
int n;
cin>>n;
cin.ignore();
char a[101];
for ( int i=0;i<n;i++)
{
a[i]=cin.get();
}
char c[101];
char d[101];
int t=0;
for ( int i=0,j=0;i<n;i++,j++)
{
if (a[i]!= ' ' )
{
c[j-t]=a[i];
}
if (a[i]== ' ' )
{
t++;
}
}
if (t!=0)
{
cout<< "入栈不成功" <<endl;
return 0;
}
for ( int i=0;i<n-t;i++)
{
d[i]=c[i];
}
SqStack S;
InitStack(S);
for ( int i=0;i<n-t;i++)
{
Push(S,c[i]);
}
char e;
for ( int i=0;i<n-t;i++)
{
Pop(S,e);
c[i]=e;
}
int f=0;
for ( int i=0;i<n-t;i++)
{
if (c[i]!=d[i])
f++;
}
if (f!=0)
{
cout<< "此字符串不是回文串" ;
}
if (f==0)
{
cout<< "此字符串是回文串" ;
}
return 0;
}
|