本关任务:在题干所给程序框架的基础上,编写程序,输入一个字符串,判断是否为回文,是回文则输出"Yes",否则输出"No"。 所谓回文是指一个句子从左到右读和从右到左读是完全一样的,例如 "Able was I ere I saw elba","上海自来水来自海上"。 要求:字符串中可以包含空格以及汉字,但没有换行符(即'\n')和回车符(即'\r'),并且忽略英文字符的大小写,限定字符串长度最大为80。 UTF-8字符集 提示:与课堂上讲授不同,EduCoder平台上汉字使用的是UTF-8字符集。在UTF-8字符集中,一个汉字占三个字节,并且汉字的第一个字节的取值范围是0x80~0xFF,而普通ASCII字符(包括英文字符)只有一个字节,并且取值范围是0x00~0x7F(即0~127)。C语言
时间: 2024-02-09 17:09:04 浏览: 392
判断字符串是否回文 程序
4星 · 用户满意度95%
以下是本题的 C 语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN 81 // 字符串最大长度,包括空字符'\0'
int main() {
char s[MAX_LEN]; // 存储输入的字符串
char t[MAX_LEN]; // 存储去掉空格后的字符串
int i, j, len, flag;
// 读入字符串
fgets(s, MAX_LEN, stdin);
len = strlen(s) - 1; // 去掉输入字符串的换行符
// 去掉空格,将字符串存入t中
j = 0;
for (i = 0; i < len; i++) {
if (!isspace(s[i])) {
t[j++] = tolower(s[i]);
}
}
t[j] = '\0'; // 字符串以空字符'\0'结尾
// 判断是否为回文
flag = 1; // 假设为回文
len = strlen(t);
for (i = 0; i < len/2; i++) {
if (t[i] != t[len-i-1]) {
flag = 0; // 不是回文
break;
}
}
// 输出结果
if (flag) {
printf("Yes\n");
} else {
printf("No\n");
}
return 0;
}
```
程序中用到了 C 语言的字符串处理函数,如 `fgets`、`strlen`、`isspace`、`tolower` 等。其中,`fgets` 函数可以读入包含空格的字符串,`isspace` 函数可以判断一个字符是否为空格,`tolower` 函数可以将一个英文字符转换为小写。
阅读全文