带空格的回文串判断
递归:
#include<iostream>
#include<string>
using namespace std;
char a[100];
int low = 0, high = 0;
int isHuiWen(char a[], int low, int high) {
if (a[low] == a[high]) {
if (low + 1 == high || low == high)//考虑奇数偶数的情况
return 1;
else {
low++; high--;//向中间靠拢比较
isHuiWen(a, low, high);
}
}
else
return 0;
}
int main()
{
bool x;
gets_s(a);//可输入空格
high = strlen(a)-1;//长度减一才是最后一个的下标
x = isHuiWen(a, low, high);
if (x == 1)
cout << "shi" << endl;
else
cout << "bu shi" << endl;
return 0;
}
方法二:通过栈判断
#include<iostream>
#include<cstring>
using namespace std;
//栈的结构体定义
typedef struct {
char data[50];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack& s) {
s.top = -1;
}
//进栈
bool Push(SqStack& s, char x) {
if (s.top + 1 > +50)
return false;
s.data[++s.top] = x;
return true;
}
//出栈
bool Pop(SqStack& s, char &x) {
if (s.top == -1)
return false;
x = s.data[s.top--];
return true;
}
//栈顶元素
bool getTop(SqStack s, char& x) {
if (s.top == -1)
return false;
x = s.data[s.top];
return true;
}
char a[50];//存放字符串的字符型数组
int main()
{
SqStack s;//定义栈
InitStack(s);//初始化栈
memset(s.data, 0, 50);
gets_s(a);//输入字符
int lena = strlen(a), topElem, i, j;
char x;
for (i = 0; i < lena/2; i++)//前半段放入栈中
Push(s, a[i]);
if (lena % 2 == 1) i++;//如果是奇数个字符,则跳过中间字符的比较
for (j = i; j < lena; j++) {//逐一判断栈中字符是否与后面的字符相同
getTop(s, x);
if (a[i++] == x)
Pop(s, x);//相同则出栈,判断下一个字符
else
break;//不同则跳出循环
}
if (j == lena)
cout << "shi";
else
cout << "bu shi";
return 0;
}
输入:
a b c
输出:
bu shi
输入:
a b a
输出:
shi