gpt4 book ai didi

检查非对称回文

转载 作者:行者123 更新时间:2023-11-30 14:35:41 26 4
gpt4 key购买 nike

我已经为 myprogramminglab 作业编写了一个程序,该程序应该接受字符串输入,检查它是否是回文,然后输出结果。

我所拥有的一切都适用于除了一次测试之外的所有事情。 “一个人计划巴拿马运河”是一个回文,但我的程序说它不是。我认为这一定是因为程序将第二个空格与“panama”中的“m”进行了比较。

另一方面,“able was i ere i saw elba”被捕获为回文,但我猜这是因为它是对称的,并且跳过左侧的空白与跳过白色同时发生右侧有空格。

#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);
}
}

最佳答案

您正在检查大写字符'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);

}

关于检查非对称回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58405049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com