用栈的思想判断回文字符串(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;
}

输出:

相关推荐
0xDevNull5 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
小小亮015 小时前
Next.js基础
开发语言·前端·javascript
ALex_zry5 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
Amumu121386 小时前
Js:正则表达式(二)
开发语言·javascript·正则表达式
米粒16 小时前
力扣算法刷题 Day 27
算法·leetcode·职场和发展
Sgf2276 小时前
ES8(ES2017)新特性完整指南
开发语言·javascript·ecmascript
好大哥呀7 小时前
C++ Web 编程
开发语言·前端·c++
ID_180079054737 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
Fuxiao___7 小时前
C 语言核心知识点讲义(循环 + 函数篇)
算法·c#
漫随流水7 小时前
c++编程:反转字符串(leetcode344)
数据结构·c++·算法