要求判断输入的字符是否为回文(“回文”,即正读反读都是一样的,例如noon, civic, radar或者风扇能扇风 ,奶牛产牛奶等都属于回文)
编写程序:
#include<stdio.h>
#include<string.h>
int main(void){
int i, sign=1, length; //符号变量sign
char str[10]; //定义一个字符数组
printf("输入长度不超过10的字符串:\n");
gets(str); //直接接收一个字符串并存入数组(需先导入string.h)
length=strlen(str); //测量所输入字符串的长度
for(i=0; i<length/2; i+=1){
if(str[i]!=str[length-2-i]) //从两端开始比较每一个字符是否相等
sign=0;break; //如果对比时出现不相等情况,使sign置0并立即跳出循环
}
if(sign) printf("该字符串是回文"); //通过sign值判断该字符串是否为回文
else printf("该字符串不是回文");
return 0;
}
输入一个不是回文的字符串:
输入一个是回文的字符串:
========但该程序无法正确判断有中文字符的情况==========
一下程序可以实现对全中文字符串的判断和部分含其他字符的字符串的判断:
#include<stdio.h>
#include<string.h>
int main(void){
int i, sign=1, length; //符号变量sign
char str[20]; //定义一个字符数组
printf("输入长度不超过10个汉字:\n");
gets(str); //直接接收一个字符串并存入数组(需先导入string.h)
length=strlen(str); //测量所输入字符串的长度
if(str[i]!=str[length-2-i]&&str[i+1]!=str[length-1-i]){ //从两端开始比较每一个汉字(每两个字节)是否相等
sign=0;break;
} //如果对比时出现不相等情况,使sign置0并立即跳出循环
}
if(sign) printf("该字符串是回文"); //通过sign值判断该字符串是否为回文
else printf("该字符串不是回文");
return 0;
}
可以看出我只是修改了程序中对输入的字符串判断的部分。因为中文字符占两个字节(其他字符一般占一个字节),我们将两个连续的字符连起来判断即可。
但这样做也会有缺点,那就是无法对中文字符中又有其他字符的字符串进行正确的判断。
运行上面的代码就会出现下面两种“神奇”的情况:
情况1:有其除中文外的他字符,但正确判断了
情况2:有其除中文外的他字符,判断错误
其实这并不“神奇”,因为我们现在将每两个看成一个字符……点到为止,你可以自行思考。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82680.html