|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
代码:
- bool isPalindrome(char * s){
- if(s==NULL){//空字符串为有效回文串
- return true;
- }
- char s1[sizeof(s)];
- char s2[sizeof(s)];
- int t=0;int p=0;
- for(int i=0;i<sizeof(s);i++){//将字符串中字符变小写后正着输入新字符串
- if(s[i]>='A'&&s[i]<='Z'){
- s[i]=s[i]+32;
- }
- if((s[i]>='a'&&s[i]<='z')){
- s1[t]=s[i];
- t=t+1;
- }
- }
- for(int j=(sizeof(s)-1);j>=0;j--){//将字符串中字符变小写后倒着输入新字符串
- if(s[j]>='A'&&s[j]<='Z'){
- s[j]=s[j]+32;
- }
- if((s[j]>='a'&&s[j]<='z')){
- s2[p]=s[j];
- p=p+1;
- }
- }
- if(s1==s2){//判断两个新字符串是否相等
- return true;
- }
- else
- {
- return false;
- }
- }
复制代码
我这个东西有什么问题那?输入"A man, a plan, a canal: Panama"后应该是true,我的代码却是false,找不出问题。
问题很多啊。不一一列举了
字符串操作最好使用专用的函数库 string.h
帮你修改了。
- #include <stdio.h>
- #include <string.h>
- bool isPalindrome(char * s){
- if(s==NULL){//空字符串为有效回文串
- return true;
- }
- int len=strlen(s);
- char s1[len+1];
- char s2[len+1];
- int t=0;int p=0;
- for(int i=0;i<len;i++){//将字符串中字符变小写后正着输入新字符串
- if(s[i]>='A'&&s[i]<='Z'){
- s[i]=s[i]+32;
- }
- if((s[i]>='a'&&s[i]<='z')){
- s1[t]=s[i];
- t=t+1;
- }
- }
- s1[t]='\0';
- for(int j=len;j>=0;j--){//将字符串中字符变小写后倒着输入新字符串
- if(s[j]>='A'&&s[j]<='Z'){
- s[j]=s[j]+32;
- }
- if((s[j]>='a'&&s[j]<='z')){
- s2[p]=s[j];
- p=p+1;
- }
- }
- s2[p]='\0';
- if(strcmp(s1,s2)){//判断两个新字符串是否相等
- return false;
- }
- else
- {
- return true;
- }
- }
- int main(void) {
- char str[100]={'\0'};
- strcpy(str,"A man, a plan, a canal: Panama");
- if (isPalindrome(str))
- printf("YES");
- else
- printf("NO");
- return 0;
- }
复制代码
|
|