题目描述 有一个字符串,都是ASCII字符,不超过100个,请判断该字符串是否为回文串。若是回文串,输出Yes,否则输出No。注意:回文串是正读反读都相同的字符串,回文串不区分大小写。 输入 测试数据有多组,每组单独占一行,包含一个不超过100个字符的字符串。 输出 对于每组测试数据,输出结果单独占一行。
时间: 2024-03-14 08:44:53 浏览: 52
好的,下面是一个用C语言实现的判断回文串的程序,可以处理多组测试数据:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int is_palindrome(char *str);
int main() {
char str[101];
while (fgets(str, 101, stdin) != NULL) {
if (is_palindrome(str)) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
int is_palindrome(char *str) {
int len = strlen(str) - 1;
int i, j;
for (i = 0, j = len - 1; i < j; i++, j--) {
while (!isalpha(str[i]) && !isdigit(str[i])) {
i++;
}
while (!isalpha(str[j]) && !isdigit(str[j])) {
j--;
}
if (tolower(str[i]) != tolower(str[j])) {
return 0;
}
}
return 1;
}
```
该程序使用了 `fgets` 函数从标准输入中读取多组测试数据,每次读取一行字符串,存储在 `str` 变量中。然后调用 `is_palindrome` 函数判断该字符串是否为回文串,并输出相应的结果。
`is_palindrome` 函数用于判断一个字符串是否为回文串。它首先计算字符串的长度,然后使用两个指针 `i` 和 `j` 分别指向字符串的开头和结尾。在每次循环中,如果 `i` 指向的字符不是字母或数字,则将 `i` 后移一位;如果 `j` 指向的字符不是字母或数字,则将 `j` 前移一位。然后判断 `i` 和 `j` 指向的字符是否相等,如果不相等,则说明该字符串不是回文串,返回 0;否则继续循环。如果循环结束后仍然没有返回,则说明该字符串是回文串,返回 1。
需要注意的是,在判断字符是否为字母或数字时,需要使用 `isalpha` 和 `isdigit` 函数,可以通过 `ctype.h` 头文件引入这两个函数。另外,在比较字符时,需要将它们都转换为小写字母,可以使用 `tolower` 函数。
希望这个程序能够帮到你,如果有任何问题,欢迎继续提问!