c ++ 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个程序判定给定的字符向量是否为回文,用栈实现。(提示:将一半字符入栈)
时间: 2023-10-30 09:12:47 浏览: 113
以下是使用栈实现判断一个字符串是否为回文的C代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int top = -1;
char stack[MAX_SIZE];
void push(char c) {
if (top >= MAX_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
stack[++top] = c;
}
char pop() {
if (top < 0) {
printf("Stack Underflow\n");
return -1;
}
return stack[top--];
}
int main() {
char str[MAX_SIZE];
int i, len, mid;
printf("Enter a string: ");
scanf("%s", str);
len = strlen(str);
mid = len / 2;
for (i = 0; i < mid; i++) {
push(str[i]);
}
if (len % 2 != 0) {
i++;
}
while (str[i] != '\0') {
if (str[i] != pop()) {
printf("%s is not a palindrome\n", str);
return 0;
}
i++;
}
printf("%s is a palindrome\n", str);
return 0;
}
```
该程序首先将字符串的前一半顺序入栈,然后从字符串的中间位置开始遍历后一半,每次取出栈顶元素与后一半字符比较,如果不相同则不是回文,否则是回文。需要注意的是,如果字符串长度为奇数,则中间位置的字符不需要比较,直接跳过即可。
阅读全文