這是在學校作業。我不是在向正確的方向推動正確的答案。關於爲什麼會出現這種錯誤的解釋會很好,並解釋正確的方法。這個C程序應該做的是在用戶輸入中讀取沒有空格和標點符號並將其分配給字符數組字符串。這個數組然後應該被傳入函數迴文。 Palindrome應該是字符串的長度,如果等於1或0,則返回TRUE或1,然後檢查字符串的第一個和最後一個字符。如果它們匹配,則檢索第二個和第二個到最後一個字符以及中間的所有字符,並將其傳遞到函數迴文。從c中的字符串中刪除標點符號和空格?
#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數組中的值是什麼。我在最後一次報名前就說過了。
提示:在將消毒過的字符串傳遞給'迴文()',打印出來。然後你會知道你是否正確清理了它。 – alexis 2013-03-23 16:56:28
'if(!isspace(ch)&&!ispunct(ch))'或更好:'if(isletter(ch))' – alexis 2013-03-23 17:01:21
@user我想你的問題已經被回答了:http://meta.stackexchange.com/questions/5234/ – 2013-03-23 18:05:02