判断输入的一串字符是否为"回文"。所谓回文是指顺读和倒 读 都 一 样的 字 符 串 。例 如"level", "A BCCBA"都是回文。要求:利用子函数判断一个字符串是否是回文,若是则返回字符串"Yes!",否则返回字符串"No!"。(用C语言解决)
时间: 2025-01-12 15:04:51 浏览: 66
以下是用C语言编写的程序,用于判断输入的字符串是否为回文:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_LENGTH 1000
// 子函数:判断字符串是否为回文
int isPalindrome(char str[]) {
int left = 0;
int right = strlen(str) - 1;
while (left < right) {
// 忽略非字母字符
if (!isalnum(str[left])) {
left++;
continue;
}
if (!isalnum(str[right])) {
right--;
continue;
}
// 比较字符,忽略大小写
if (tolower(str[left]) != tolower(str[right])) {
return 0; // 不是回文
}
left++;
right--;
}
return 1; // 是回文
}
int main() {
char input[MAX_LENGTH];
printf("请输入一串字符:");
fgets(input, MAX_LENGTH, stdin);
// 去除换行符
input[strcspn(input, "\n")] = '\0';
if (isPalindrome(input)) {
printf("Yes!\n");
} else {
printf("No!\n");
}
return 0;
}
```
这个程序的工作原理如下:
1. 我们定义了一个子函数 `isPalindrome`,它接受一个字符串作为参数。
2. 在 `isPalindrome` 函数中,我们使用两个指针 `left` 和 `right`,分别指向字符串的开始和结束。
3. 我们遍历字符串,跳过非字母数字字符,并比较对应位置的字符(忽略大小写)。
4. 如果所有对应的字符都相同,则返回 1,表示是回文;否则返回 0。
5. 在 `main` 函数中,我们读取用户输入的字符串。
6. 我们使用 `fgets` 函数读取输入,并用 `strcspn` 函数去除换行符。
7. 最后,我们调用 `isPalindrome` 函数,并根据返回结果打印 "Yes!" 或 "No!"。
这个程序可以处理包含空格和标点符号的字符串,并且不区分大小写。
阅读全文
相关推荐

















