使用栈的算法编写一个程序,判断一个字符串是否为"回文"(顺读和倒读都一样的字符串称为"回文")。C语言
时间: 2024-10-18 17:06:22 浏览: 82
在C语言中,可以使用栈的数据结构来判断一个字符串是否为回文。下面是一个简单的程序示例:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
bool isPalindrome(char str[]) {
// 创建一个空栈用于存储字符
stack char tempStack;
int top = -1;
// 初始化栈
initStack(&tempStack);
// 遍历字符串,将一半的字符压入栈
for (int i = 0; str[i] != '\0'; ++i) {
if (str[i] != '\n') {
push(&tempStack, str[i]);
if (top != -1)
top++;
}
}
// 检查另一半是否与栈顶元素匹配
for (int i = 0; i <= top / 2; ++i) {
if (pop(&tempStack) != str[top - i]) {
return false;
}
}
return true;
}
void push(stack *s, char data) {
s->base[s->top++] = data;
}
char pop(stack *s) {
if (isEmpty(s))
printf("Stack Underflow\n");
return s->base[s->top--];
}
bool isEmpty(stack *s) {
return s->top == -1;
}
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
str[strlen(str) - 1] = '\0'; // Remove newline character
if (isPalindrome(str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
这个程序首先初始化一个栈,然后将字符串的一半字符推入栈中。接着,它会检查剩下的字符是否与栈顶的字符匹配。如果所有字符都能对应匹配,则说明该字符串是回文。
阅读全文