c语言设计函数算法判断回文
时间: 2023-11-28 07:45:02 浏览: 68
以下是一个C语言设计函数算法判断回文的例子:
```c
#include <stdio.h>
#include <string.h>
int isPalindrome(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 1]) {
return 0;
}
}
return 1;
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s是回文字符串\n", str);
} else {
printf("%s不是回文字符串\n", str);
}
return 0;
}
```
该程序通过isPalindrome函数判断输入的字符串是否为回文字符串,如果是则输出“是回文字符串”,否则输出“不是回文字符串”。
相关问题
对于一个采用字符数组存放的字符串str,用c语言设计一个递归算法判断str是否为回文
回文即正着读和倒着读都相同的字符串,可以采用递归算法进行判断。具体实现方法如下:
1. 定义两个指针i和j,分别指向字符串str的首尾字符;
2. 判断i和j所指向的字符是否相同,如果不同直接返回false;
3. 如果相同,将i向后移动一个字符,将j向前移动一个字符,递归调用判断函数,直到i等于j或者i大于j;
4. 如果执行到步骤3中的递归调用,最后返回true。
具体代码如下:
```c
#include <stdio.h>
#include <string.h>
int isPalindrome(char str[], int i, int j) {
if (i >= j) {
return 1;
}
if (str[i] != str[j]) {
return 0;
}
return isPalindrome(str, i + 1, j - 1);
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
if (isPalindrome(str, 0, strlen(str) - 1)) {
printf("该字符串是回文。\n");
} else {
printf("该字符串不是回文。\n");
}
return 0;
}
```
应用c语言设计一个算法利用顺序栈的基本运算判断一个字符串是否是回文
使用C语言设计一个判断字符串是否是回文的算法,可以借助顺序栈(数组实现),步骤如下:
1. 初始化两个指针,一个指向字符串开始(`start`),另一个指向字符串结束(`end`)。
2. 创建一个空栈,用于存储字符。比如可以定义一个字符数组 `stack[stack_size]` 和一个索引 `top`。
3. 当 `start < end` 时,进入循环:
- 将当前 `start` 指向的字符压入栈中。
- 将 `start` 向右移动一位(`start++`)。
4. 每次从栈顶取出一个字符并与 `end` 指向的字符比较:
- 如果它们相等,继续比较下一个字符;
- 如果它们不相等,说明不是回文,返回 `false` 或者停止判断。
5. 当 `start >= end` 且栈不为空时,依次出栈检查每个字符是否与对应的未遍历字符相等,全部匹配则为回文,返回 `true`。
6. 如果栈已经出完,说明字符串长度小于等于2(只有一个字符或者没有字符)的情况也被视为回文,返回 `true`。
下面是一个简单的示例代码片段:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STACK_SIZE 100
// 判断字符串是否回文的函数
int isPalindrome(char* str) {
int top = -1; // 栈顶元素的位置
char stack[MAX_STACK_SIZE]; // 顺序栈
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
stack[++top] = str[start];
start++;
if (top == MAX_STACK_SIZE - 1) {
printf("Stack overflow!\n");
return 0; // 若栈满,则不是回文
}
if (str[end] != stack[top]) {
return 0; // 字符不匹配,非回文
}
end--;
}
while (top >= 0 && stack[top] == str[end--]) {
top--;
}
return top == -1 ? 1 : 0; // 返回是否为回文
}
int main() {
char test_str[] = "madam";
if (isPalindrome(test_str)) {
printf("%s is a palindrome.\n", test_str);
} else {
printf("%s is not a palindrome.\n", test_str);
}
return 0;
}
```
阅读全文