题目:输入一个字符串并且判断字符串是否为回文。
#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;
}
        输出:

