C语言利用顺序栈判断一个字符串是否为对称串
时间: 2024-10-13 10:12:46 浏览: 51
在C语言中,我们可以使用顺序栈(也称为数组栈)来检查一个字符串是否是对称串。对称串是指从前往后读和从后往前读是一样的字符串,例如 "madam" 和 "level"。
以下是简单的步骤:
1. 首先,创建一个栈并初始化为空,然后将字符串的首字符压入栈中。
2. 接下来,遍历字符串的剩余部分,依次取出每个字符并与栈顶元素比较。如果相等,则继续处理下一个字符;如果不等,则字符串不是对称的,可以结束判断。
3. 每次遍历时都要记得弹出栈顶元素,直到遍历完整个字符串。如果最终栈为空,说明所有的字符都找到了对应的位置,且它们成对存在,所以原始字符串是对称的。
4. 如果遍历结束后还有非空栈,说明有一半以上的字符未找到对应的另一半,因此原字符串不对称。
下面是伪代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
bool isPalindrome(char str[]) {
int stack[MAX_SIZE];
int top = -1;
// 将字符串首字符压入栈
for (int i = 0; str[i] != '\0'; i++) {
stack[++top] = str[i];
// 双指针法,一个向前,一个向后
if (i + 1 < strlen(str)) { // 避免越界
if (str[i] != str[i+1]) {
return false; // 对称串条件不满足,直接返回false
}
} else { // 到了字符串末尾
while (top >= 0) { // 逐个对比栈顶元素与前半部分字符
if (stack[top] != str[i-top-1]) {
return false;
}
top--;
}
return true; // 所有元素均匹配,返回true
}
}
}
// 主函数演示
int main() {
char str[] = "madam";
if (isPalindrome(str)) {
printf("'%s' is a palindrome.\n", str);
} else {
printf("'%s' is not a palindrome.\n", str);
}
return 0;
}
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)