请编写一段代码,判断一个字符串是不是回文串。 函数接口定义: int Is_Pstring(sequence_stack *st,char str[]);
时间: 2024-10-16 13:18:04 浏览: 23
为了判断一个字符串是否为回文串,你可以创建一个函数,该函数接受一个字符数组(str)作为输入,并使用栈数据结构来辅助检查。这里是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stack>
// 定义序列栈结构体
typedef struct sequence_stack {
char* data;
size_t top;
} sequence_stack;
// 初始化序列栈
void init_sequence_stack(sequence_stack* st) {
st->data = NULL;
st->top = 0;
}
// 入栈操作
void push(sequence_stack* st, char c) {
if (st->top == 0) {
st->data = (char*)malloc(sizeof(char) * 16);
if (!st->data) {
printf("Memory allocation failed.\n");
return;
}
} else {
st->data[st->top] = '\0';
}
st->data[++st->top] = c;
}
// 出栈操作并返回栈顶元素
char pop(sequence_stack* st) {
if (st->top == 0) {
printf("Stack is empty.\n");
return '\0';
}
char c = st->data[st->top];
st->data[st->top] = '\0';
st->top--;
return c;
}
// 判断是否为回文串
int Is_Pstring(sequence_stack* st, char str[]) {
init_sequence_stack(st);
// 将字符串反转并入栈
for (size_t i = strlen(str) - 1; i >= 0; i--) {
push(st, str[i]);
}
bool is_palindrome = true;
// 检查栈顶元素是否与原字符串匹配
for (size_t i = 0; i < strlen(str) / 2; i++) {
char left = pop(st), right = str[i];
if (left != right) {
is_palindrome = false;
break;
}
}
free(st->data);
st->data = NULL;
st->top = 0;
return is_palindrome ? 1 : 0; // 返回1表示是回文串,0表示不是
}
int main() {
char str[] = "madam";
sequence_stack st;
int result = Is_Pstring(&st, str);
if (result) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
这段代码首先初始化了一个空的`sequence_stack`,然后将字符串反转并依次入栈。接着逐一对比栈顶元素和原始字符串对应的字符,如果有不匹配,则立即返回false。如果全部匹配,最后返回true。
阅读全文