我想在這C
得到兩個指針,一個用於字符串的第一個字符,而另一個字符串中的中間人物寫一個函數。功能需要檢測是否有字符串的前半部分是相同的第二半(忽略大小寫),並返回"TRUE"
或"FALSE"
。Ç - 遞歸處理字符串
我不知道停止條件的遞歸和爲什麼它不工作。
這是我的代碼。什麼是錯誤?
#define SIZE 80
enum { FALSE = 0, TRUE = 1 };
int CheckString(char* start, char* middle);
int main()
{
char str[SIZE], *pstart, *pmiddle;
printf("Enter a String-->:");
fgets(str, SIZE, stdin);
pstart = &str[0];
pmiddle = &str[(strlen(str) - 1)/2];
printf(" %d \n", CheckString(pstart, pmiddle));
return 0;
}
int CheckString(char* start, char* middle)
{
if (middle == '\0');
return TRUE;
if ((*start == *middle) || (*start == *middle + 32) || (*start == *middle - 32))
CheckString(start + 1, middle + 1);
else
return FALSE;
}
我改成了這個代碼
int CheckString(char* start, char* middle)
{
if ((*start == *middle) || (*start == *middle + 32) || (*start == *middle - 32))
{
CheckString(start + 1, middle + 1);
return TRUE;
}
else
return FALSE;
}
,現在它的工作,但只對第一個字符和中間的不動什麼撥錯檢查下字符 幫助別人???
的'pstart'以及'main'功能'pmiddle'變量*單個字符*,而不是指針。你的函數將跳出這些變量的界限,你將會有*未定義的行爲*。 –
所以把它改成'* pstart'? –
由於遞歸路徑沒有返回值,因此會發出編譯器警告。你只需調用'CheckString()',不要將它的返回值返回給遞歸鏈。是的,'pstart'和'pmiddle'需要指向原始字符串的開頭和中間,而不是當前實現的那些位置的字符的副本。 – dhke