题目:输入一个字符串并且判断字符串是否为回文。
#include<stdio.h>
#include<string.h> // 包含strlen函数所需的头文件
#include<stdbool.h> // 包含bool类型所需的头文件
#define MAX_STACK_SIZE 100 // 定义栈的最大大小
//定义栈结构
typedef struct
{
char data[MAX_STACK_SIZE];
int top;
}Stack;
//初始化栈
void initStack(Stack *s)
{
s->top = -1;
}
//压栈
void push(Stack *s,char c)
{
if(s->top < MAX_STACK_SIZE - 1)
{
s->data[++(s->top)] = c;
}
}
//弹栈
char pop(Stack *s)
{
if(s->top >= 0)
{
return s->data[(s->top)--];
}
return '\0'; //栈空返回空字符
}
//判断字符串是否为回文
bool isPalindrome(const char *str)
{
Stack s;
initStack(&s);
int i;
int len = strlen(str);
if(len <= 1)
{
return true;
}
//将前半部分字符入栈
for(i = 0; i < len/2; i++)
{
push(&s, str[i]);
}
//确定后半部分起始索引
int start = len % 2 == 0 ? len/2 : len/2 + 1;
//比较后半部分与栈中弹出的字符
for(i = start; i < len; i++)
{
if(pop(&s) != str[i])
{
return false;
}
}
return true;
}
int main()
{
char input[100];
printf("请输入一个字符串:");
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = '\0'; // 去除换行符
if(isPalindrome(input))
{
printf("\"%s\" 是回文字符串。\n", input);
}
else
{
printf("\"%s\" 不是回文字符串。\n", input);
}
return 0;
}
输出:

