c语言请设计一个算法,使用栈,判断一个字符串是否为回文。回文:是指正读反读均相同的字符序列,如abba和abdba都是回文,而hello就不是回文。(提示:使用数组存储一个字符串,然后将一半字符入栈。
时间: 2024-05-27 13:14:01 浏览: 109
C语言 判断字符串是否是回文
5星 · 资源好评率100%
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAX_SIZE 100
char stack[MAX_SIZE]; // 定义栈
int top = -1; // 栈顶指针
// 入栈操作
void push(char c) {
top++;
stack[top] = c;
}
// 出栈操作
char pop() {
char c = stack[top];
top--;
return c;
}
// 判断是否为回文字符串
bool isPalindrome(char str[]) {
int len = strlen(str);
int mid = len / 2; // 字符串中点位置
int i;
// 将字符串的前一半入栈
for (i = 0; i < mid; i++) {
push(str[i]);
}
// 如果字符串长度为奇数,中点位置的字符不需要比较
if (len % 2 != 0) {
i = mid + 1;
}
else {
i = mid;
}
// 依次比较栈中字符和字符串后一半的字符
while (i < len) {
if (str[i] != pop()) {
return false;
}
i++;
}
return true;
}
int main() {
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s是回文字符串。\n", str);
}
else {
printf("%s不是回文字符串。\n", str);
}
return 0;
}
阅读全文