C语言//利用栈结构实现进制转换问题、回文判断问题 //利用栈判断字符串str是否为回文,是输出"yes"并返回true,不是输出"no"并返回false bool ishuiwen(char str[])
时间: 2024-10-20 11:13:34 浏览: 33
JS使用栈判断给定字符串是否是回文算法示例
5星 · 资源好评率100%
在C语言中,我们可以利用栈的数据结构来解决进制转换和回文判断的问题。
**1. 进制转换问题**:
对于整数从一种基数(如十进制)转换到另一种基数(如二进制或八进制),可以按照以下步骤操作:
- 使用栈存储每个进位过程中的数字。
- 分别处理每一位,如果当前位是0-9,则直接入栈;如果是A-F(十六进制),需要先减去相应的ASCII码再入栈。
- 当处理完所有位后,栈顶元素即为最高位,然后逐出栈并将每位乘以基数,累加起来得到最终结果。
**2. 回文判断问题**:
判断一个字符串`str`是否为回文,可以用栈来辅助实现:
- 遍历字符串的一半,将每个字符依次压入栈中。
- 再次遍历字符串的另一半,从栈顶取出字符并与当前字符对比,如果不相等则非回文。
- 如果两部分都匹配完成,那么字符串就是回文。
关于`ishuiwen`函数的实现,你可以这样编写:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool ishuiwen(char str[]) {
int len = strlen(str);
char stack[len / 2 + 1]; // 为了存放中间的字符
int top = -1;
for (int i = len - 1; i >= 0; i--) {
if (i % 2 == 0) { // 只对奇数索引的字符做处理,避免重复
stack[++top] = str[i];
} else {
if (stack[top] != str[i]) {
return false;
}
}
}
return true;
}
int main() {
char str[] = "madam";
if (ishuiwen(str)) {
printf("yes\n");
return true;
} else {
printf("no\n");
return false;
}
}
```
阅读全文