用栈的思想判断回文字符串(C语言)

题目:输入一个字符串并且判断字符串是否为回文。

复制代码
#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;
}

输出:

相关推荐
我不是程序猿儿4 小时前
【C#】WinForms 控件句柄与 UI 刷新时机
开发语言·ui·c#
十五年专注C++开发4 小时前
Qt-Nice-Frameless-Window: 一个跨平台无边框窗口(Frameless Window)解决方案
开发语言·c++·qt
hans汉斯4 小时前
【计算机科学与应用】基于BERT与DeepSeek大模型的智能舆论监控系统设计
大数据·人工智能·深度学习·算法·自然语言处理·bert·去噪
凯歌的博客4 小时前
python虚拟环境应用
linux·开发语言·python
祈祷苍天赐我java之术5 小时前
如何在Java中整合Redis?
java·开发语言·redis
多喝开水少熬夜5 小时前
损失函数系列:focal-Dice-vgg
图像处理·python·算法·大模型·llm
学习路上_write5 小时前
STM32回调函数使用/定时器/GPIO/串口/
c语言·单片机·嵌入式硬件
立志成为大牛的小牛5 小时前
数据结构——三十七、关键路径(王道408)
数据结构·笔记·程序人生·考研·算法
froginwe115 小时前
HTML5 测验
开发语言
ytttr8736 小时前
基于MATLAB的Relief算法特征权重选择实现
算法