我已经为myprogramminglab分配编写了一个程序,该程序应该接受字符串输入,检查其回文,然后输出结果。
除了一项测试之外,我所拥有的一切都在起作用。 “一个人计划一个巴拿马运河”是一个回文,但我的计划却并非如此。我认为这一定是因为程序将第二个空格与“巴拿马”中的“ m”进行比较。
在另一面,“可能是我看见了厄尔巴岛”被认为是回文症,但是我想这是因为它是对称的,并且在左侧跳过白色空间与在跳过白色的同时发生右边的空间。
#include <stdio.h>
#include <stdlib.h>
int is_not_alnum(char c);
int testPalindrome(const char string[], int begin, int end);
int main (void)
{
int n;
char temp;
printf("Enter the size of your string: ");
scanf("%d" , &n);
char string[n];
printf("Enter your string to check if it is a palindrome: ");
scanf("%c",&temp);
scanf("%[^\n]" , string);
if(testPalindrome(string, 0 , n - 1))
printf("\"%s\" is a Palindrome.\n" , string);
else
printf("\"%s\" is not a Palindrome.\n" , string);
//puts("");
return(0);
}
//program only needs to worry about lowercase and 0-9 alphanumeric
int is_not_alnum(char c)
{
if( ((c >= 'a') && (c <= 'Z')) || ((c >= '0') && (c <= '9')) )
return(0);
else
return(1);
}
int testPalindrome(const char string[], int begin, int end)
{
while (begin <= end)
{
if(is_not_alnum(string[begin]))
begin++;
if(is_not_alnum(string[end]))
end--;
if(string[begin] == string[end])
{
return(testPalindrome(string , begin++ , end--));
return(1);
}
else
return(0);
}
}
答案 0 :(得分:1)
您正在检查大写字符'Z',它应该是:
#include <stdio.h>
#include <stdlib.h>
int is_not_alnum(char c);
int testPalindrome(const char string[], int begin, int end);
int main (void)
{
int n;
char temp;
printf("Enter the size of your string: ");
scanf("%d" , &n);
char string[n];
printf("Enter your string to check if it is a palindrome: ");
scanf("%c",&temp);
scanf("%[^\n]" , string);
if(testPalindrome(string, 0 , n - 1))
printf("\"%s\" is a Palindrome.\n" , string);
else
printf("\"%s\" is not a Palindrome.\n" , string);
//puts("");
return(0);
}
//program only needs to worry about lowercase and 0-9 alphanumeric
int is_not_alnum(char c)
{
if( ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')) )
return(0);
else
return(1);
}
int testPalindrome(const char string[], int begin, int end)
{
if (begin <= end)
return(1);
if(is_not_alnum(string[begin]))
begin++;
if(is_not_alnum(string[end]))
end--;
if(string[begin] == string[end])
{
return(testPalindrome(string , begin++ , end--));
}
else
return(0);
}