试写一个算法,判断依次读入的一个以@为结束符的字符序列,是否为回文。所谓“回文“是指正向读和反向读都一样的一字符串,如“321123”或“ableelba”使用c语言完成
时间: 2023-11-27 15:53:30 浏览: 130
可以使用栈来判断一个字符串是否为回文。具体的做法是将字符串的前一半依次入栈,然后再依次出栈并与剩余字符串的后一半比较,如果全部相同,则该字符串为回文。
下面是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
typedef struct {
char data[MAX_LEN];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
if (s->top == MAX_LEN - 1) {
printf("Stack is full!\n");
exit(1);
}
s->data[++s->top] = c;
}
char pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
int main() {
Stack s;
char str[MAX_LEN];
int i, len;
printf("Please input a string (end with \'@\'):\n");
scanf("%s", str);
len = strlen(str);
initStack(&s);
for (i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
if (len % 2 == 1) {
i++;
}
while (i < len) {
if (str[i++] != pop(&s)) {
printf("This string is not a palindrome.\n");
return 0;
}
}
printf("This string is a palindrome.\n");
return 0;
}
```
注意,这个算法只适用于字符串长度为偶数或者奇数的情况。如果字符串的长度为奇数,则需要跳过中间的字符。
阅读全文