c - 在c 中,数组从字符串中删除标点和空白?

  显示原文与译文双语对照的内容

这是为学校作业准备的。 我不是在向正确的答案要求正确的答案。 关于为什么这样出错的解释将是伟大的,以及对正确方法的解释。 这个C 程序应该做的是读取没有空格和标点符号的用户输入,并将它分配给字符 array 字符串。 这个 array 应该被传递到函数回文中。 回文长度应该是字符串长度,如果等于 1或者 0 return true 或者 1其他,则继续并检查字符串的第一个和最后一个字符。 如果他们匹配了 2nd 和 2nd 到最后一个字符,和所有的字符,并传递给函数回文。


#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] = '';



printf("n");


if(palindrome(string))


 printf("Palindromen");


else


 printf("Not a palindromen);



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] = '';


 palindrome(str_new);


 }


 else


 return FALSE;



 }


}



它总是输出的字符串不是回文,无论输入的内容是什么。 例如当我输入

他是一个恶魔,嗯?

它打印出来

不是回文

当我编辑程序来检查 array 字符串中使用的内容时,它是

他是一个恶魔,嗯?

在我的代码中可以随意评论代码使用改进的其他方面。 它们真的没有提供任何它的他的东西,也没有它的权限,或者没有关于我们的代码。

编辑:
我检查了一下字符 array 。字符串中的值是什么。 我在最后一个引用之前说这个。

时间: 原作者:


if(isspace(ch)==FALSE || ispunct(ch)==FALSE);



这是你的错误。首先,不应该有分号( ; ) 。

第二,你不应该使用或者,你应该使用,因为你要确保你在过滤除字母表之外的所有内容:


if(isspace(ch)==FALSE && ispunct(ch)==FALSE)



同样:


for(i = 1, j = 0; str[i]!=str[length-1]; i++, j++)



在这里,布尔表达式是错误的。 你应该对 j 进行评估:


for(i = 1, j = 0; j <length - 1; i++, j++)



最后,在向新字符串追加字符时,对 i++ 语句的定位不正确。 这样编译器就会知道它需要成为循环的主体和块外部的一部分。

...