这是学校的家庭作业。我不是要求正确的答案,只是朝着正确的方向前进。关于为什么会出错的解释以及对正确方法的解释会很好。这个 C 程序应该做的是在没有空格和标点符号的情况下读取用户输入并将其分配给字符数组字符串。然后应该将该数组传递给函数回文。回文应该是字符串的长度,如果等于 1 或 0,则返回 TRUE 或 1,否则继续检查字符串的第一个和最后一个字符。如果它们匹配,则检索倒数第二个和第二个字符,以及它们之间的所有字符,并将其传递给函数 palindrome。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
typedef int Bool;
Bool palindrome(char str[]);
main()
{
char string[1000], ch;
int i = 0;
printf("Enter a message: ");
while((ch = getchar()) != '\n'){
if(isspace(ch)==FALSE || ispunct(ch)==FALSE);
string[i] = tolower(ch);
i++;
}
string[i] = '\0';
printf("\n");
if(palindrome(string))
printf("Palindrome\n");
else
printf("Not a palindrome\n);
return 0;
}
Bool palindrome(char str[])
{
int length = strlen(str);
if((length == 1) || (length == 0))
return TRUE;
else
{
if((str[0] == str[length - 1])
{
char str_new[length-1];
int i, j;
for(i = 1, j = 0; str[i]!=str[length-1]; i++, j++)
str_new[j] = str[i];
str_new[i] = '\0';
palindrome(str_new);
}
else
return FALSE;
}
}
不管输入是什么,它总是打印给定的字符串不是回文。例如当我输入
他像魔鬼一样生活,嗯?
它打印出来
不是回文
此外,当我编辑程序以使用先前的输入检查数组字符串中的内容时,它是
他像魔鬼一样生活,嗯?
如果您看到代码使用改进,请随意评论我的代码的任何其他方面。他们真的不提供任何东西,除了“是”它是正确的或“不是”它与我们的代码无关。
编辑:
我确实检查了 char 数组字符串中的值是什么。我在最后一个引用之前说这个。