在此忽略标点符号的检查回文字符串的代码中出错
getting error in this code of checking palindrome string neglecting punctuation marks
我正在编写代码来检查字符串是否为回文或 not.I 想要忽略空格和标点符号或任何其他非字母字符。
根据我的代码,这基本上意味着 "madam 'I Imadam" 也应该是回文。
但是没有得到合适的结果。
#include <stdio.h>
#include <stdlib.h>
void chkpalindrome(char []);
int main()
{
char s[50];
gets(s);
chkpalindrome(s);
return 0;
}
void chkpalindrome(char a[50])
{
int i=0;
int j=0;
int flag=1;
while(a[j+1]!='[=10=]') //so that 'j' should point to the last index of string
{
j=j+1;
}
while((i!=j)&&(i!=(j+1)))
{
if((a[i]<'A')||('Z'<a[i]<'a')||(a[i]>'z'))
{
i=i+1;
}
else if((a[j]<'A')||('Z'<a[j]<'a')||(a[j]>'z'))
{
j=j-1;
}
else
{
if(a[i]!=a[j])
{
flag=0;
break;
}
else
{
i=i+1;
j=j-1;
}
}
}
if(flag==1)
{
printf("IT IS A PALINDROME");
}
else
{
printf("IT IS NOT A PALINDROME");
}
}
预期结果-女士,我是伊玛丹-这是回文
evee-it 不是回文
但是实际结果是每一个字符串都是回文
一个表格 90<a[i]<97
被解释为 (90<a[i])<97
,所以这当然不是你所期望的
必须是(90<a[i]) && (a[i]<97)
你有好几次那个错误
正如评论中所说,使用 'a' 之类的字符而不是代码
而不是去做
while(a[j+1]!='[=10=]') //so that 'j' should point to the last index of string
{
j=j+1;
}
我鼓励你使用 strlen
我正在编写代码来检查字符串是否为回文或 not.I 想要忽略空格和标点符号或任何其他非字母字符。 根据我的代码,这基本上意味着 "madam 'I Imadam" 也应该是回文。 但是没有得到合适的结果。
#include <stdio.h>
#include <stdlib.h>
void chkpalindrome(char []);
int main()
{
char s[50];
gets(s);
chkpalindrome(s);
return 0;
}
void chkpalindrome(char a[50])
{
int i=0;
int j=0;
int flag=1;
while(a[j+1]!='[=10=]') //so that 'j' should point to the last index of string
{
j=j+1;
}
while((i!=j)&&(i!=(j+1)))
{
if((a[i]<'A')||('Z'<a[i]<'a')||(a[i]>'z'))
{
i=i+1;
}
else if((a[j]<'A')||('Z'<a[j]<'a')||(a[j]>'z'))
{
j=j-1;
}
else
{
if(a[i]!=a[j])
{
flag=0;
break;
}
else
{
i=i+1;
j=j-1;
}
}
}
if(flag==1)
{
printf("IT IS A PALINDROME");
}
else
{
printf("IT IS NOT A PALINDROME");
}
}
预期结果-女士,我是伊玛丹-这是回文 evee-it 不是回文 但是实际结果是每一个字符串都是回文
一个表格 90<a[i]<97
被解释为 (90<a[i])<97
,所以这当然不是你所期望的
必须是(90<a[i]) && (a[i]<97)
你有好几次那个错误
正如评论中所说,使用 'a' 之类的字符而不是代码
而不是去做
while(a[j+1]!='[=10=]') //so that 'j' should point to the last index of string
{
j=j+1;
}
我鼓励你使用 strlen