用C语言代码编写程序,利用顺序栈判断一个字符串是否为对称串
时间: 2024-10-11 16:03:48 浏览: 74
使用C语言提取子字符串及判断对称子字符串最大长度
5星 · 资源好评率100%
在C语言中,我们可以使用顺序栈数据结构来判断一个字符串是否是对称串。对称串是指从前往后读和从后往前读是一样的。以下是简单的步骤和代码实现:
首先,创建一个函数`is_palindrome()`,它接受一个字符数组作为输入,并使用一个栈来辅助判断:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
char* data;
int top;
int capacity;
} Stack;
// 初始化栈
void init(Stack* stack, int size) {
stack->data = (char*)malloc(size * sizeof(char));
stack->top = -1;
stack->capacity = size;
}
// 入栈操作
void push(Stack* stack, char c) {
if(stack->top == stack->capacity - 1) {
stack->capacity *= 2; // 当满时,容量翻倍
stack->data = (char*)realloc(stack->data, stack->capacity * sizeof(char)); // 扩容内存
}
stack->data[++stack->top] = c;
}
// 出栈操作
char pop(Stack* stack) {
if(stack->top == -1) return '\0'; // 栈空则返回结束标志
return stack->data[stack->top--];
}
// 判断字符串是否为对称串
int is_palindrome(const char* str) {
Stack stack;
init(&stack, 10); // 初始化一个大小为10的栈
for(int i = 0; str[i] != '\0'; i++) {
push(&stack, str[i]); // 依次将字符入栈
}
for(int i = 0; i <= stack.top / 2; i++) { // 只需遍历一半字符,因为另一半已经在栈里了
if(pop(&stack) != str[i]) { // 如果当前字符和对应位置的字符不同,则不是对称串
return 0;
}
}
return 1; // 如果全部匹配,则是对称串
}
int main() {
const char* test_strs[] = {"abcba", "abccba", "hello"};
for(const char* str : test_strs) {
int result = is_palindrome(str);
printf("%s is a palindrome? %d\n", str, result);
}
return 0;
}
```
阅读全文