用c语言实现利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。
时间: 2024-05-08 16:18:40 浏览: 94
可以使用栈的特性:后进先出(LIFO,Last In First Out)来判断字符串是否是回文。具体流程如下:
1. 定义栈结构体,用于保存已入栈的字符。
2. 遍历字符串,将每个字符依次入栈。
3. 遍历字符串,将每个字符与栈顶元素进行比较,如果相同则出栈,继续比较下一个字符。
4. 如果字符串遍历完毕,栈也为空,则该字符串是回文,输出“Right”。
5. 如果字符串遍历完毕,栈不为空,则该字符串不是回文,输出“Wrong”。
C语言实现代码如下:
```c
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 100 // 定义栈最大容量
typedef struct Stack {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1; // 空栈的 top 为 -1
}
// 入栈
int push(Stack *s, char c) {
if(s->top == MAX_SIZE - 1) {
return 0; // 栈满,入栈失败
}
s->top++;
s->data[s->top] = c;
return 1; // 入栈成功
}
// 出栈
int pop(Stack *s) {
if(s->top == -1) {
return 0; // 栈空,出栈失败
}
s->top--;
return 1; // 出栈成功
}
// 获取栈顶元素
char getTop(Stack *s) {
if(s->top == -1) {
return '\0'; // 空栈
}
return s->data[s->top];
}
int main() {
char str[MAX_SIZE];
printf("请输入字符串:");
scanf("%s", str);
int len = strlen(str);
Stack s;
init(&s);
for(int i = 0; i < len; i++) {
push(&s, str[i]);
}
for(int i = 0; i < len; i++) {
if(str[i] != getTop(&s)) {
printf("Wrong\n");
return 0;
}
pop(&s);
}
printf("Right\n");
return 0;
}
```
注意:为了方便起见,我们假设输入的字符串长度不超过 100。如果要处理更长的字符串,需要使用动态分配内存的方式来定义字符数组。
阅读全文