用C语言实现输入一段字符串,判断是否为“回文字符串”,如“ABCBA”,“ABBABBA”,“上海自来水来自上海”,要求代码体现出栈逻辑
时间: 2024-08-13 11:09:49 浏览: 56
在C语言中,我们可以利用栈的数据结构来判断一个字符串是否为回文字符串。回文字符串是指正读反读都一样的字符串。下面是一个简单的C程序,它使用了栈来完成这个任务:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stack>
bool isPalindrome(char str[]) {
stack<char> s;
int len = strlen(str);
// 将字符串的一半字符压入栈中
for (int i = 0; i < len / 2; i++) {
s.push(str[i]);
}
// 检查另一半字符是否等于栈顶元素(注意:这里处理奇数长度和偶数长度的字符串)
for (int i = len / 2; i < len; i++) {
if (str[i] != s.top()) {
return false;
}
s.pop();
}
// 如果所有字符匹配成功,返回true
return s.empty();
}
int main() {
char input[100];
printf("请输入一个字符串:");
fgets(input, sizeof(input), stdin); // 注意去掉末尾的换行符
input[strcspn(input, "\n")] = '\0'; // 去掉换行符
bool result = isPalindrome(input);
if (result) {
printf("%s 是回文字符串\n", input);
} else {
printf("%s 不是回文字符串\n", input);
}
return 0;
}
```
在这个程序中,我们首先将字符串的一半字符压入栈中,然后从后向前检查另一半字符是否与栈顶元素匹配。如果在任何时候发现不匹配,就立即返回false,表示不是回文。最后,如果栈为空且所有字符都已检查过,那么就是回文字符串。
阅读全文