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

输出:

相关推荐
方安乐2 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
三品吉他手会点灯4 小时前
C语言学习笔记 - 20.C编程预备计算机专业知识 - 变量为什么必须的初始化【重点】
c语言·笔记·学习
Old Uncle Tom4 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆4 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
小小小米粒4 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
生信碱移4 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业5 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
czhc11400756635 小时前
C# 428 线程、异步
开发语言·c#
:1215 小时前
java基础
java·开发语言
SilentSamsara6 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python