代码源自CSDN上一位大佬的正确答案,十分感谢给予的开导。在此浅陋地对其进行了可读性优化和注释。
1.参考代码与解析
/*这道题有一个很不容易做对的测试点:"只考虑字母字符,字母的大小写没有区别。" */
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(){
char str1[1000];
char str2[1000]; //用于存储处理后的字符串
gets(str1);
int length = strlen(str1);
int sub = 0; //"sub":下标——用于追踪处理后字符串的下标
for(int i=0;i<length;i++){ //遍历str1字符串,将字母字符复制到str2数组中(我们取大写字母来统一,将小写字母化为大写字母)
if(isupper(str1[i])){ //"isupper"的函数作用:判断是否为大写字母
str2[sub++] = str1[i];
}
else if(islower(str1[i])){ //"islower"的函数作用:判断是否为小写字母
str2[sub++] = str1[i] - 32; //大小写字母ASCII码差32,将小写字母转换为大写字母
}
}
str2[sub] = '\0'; //在处理后字符串的末尾添加结束字符,形成字符串
//开始判断是否为回文串
int length2 = strlen(str2);
int flag=0;
for(int i=0;i<length2/2;i++){ //此判断法利用的是回文串的对称性
if(str2[i] != str2[length2-i-1]){
flag=1;
break;
}
}
if(flag==1){
printf("no");
}
else if(flag==0){
printf("yes");
}
return 0;
}
2.题目
输入一个字符串(可以包含空格),判断该字符串是否为回文,只考虑字母字符,字母的大小写没有区别。
回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。输入格式:
输入一串字符(长度小于100)。
输出格式:
若该串字符是回文串输出“yes",否则输出“no”。
输入样例:
level
输出样例:
yes
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB