【发布时间】:2017-10-28 09:57:39
【问题描述】:
我正在尝试在C 中编写一个函数,它获取 2 个指针,一个指向字符串中的第一个字符,另一个指向字符串中的中间字符。该函数需要检查字符串的前半部分是否与后半部分相同(忽略大小写)并返回"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;
}
现在它的工作但只针对第一个字符和中间它不会检查下一个字符 帮别人穿什么???
【问题讨论】:
-
main函数中的pstart和pmiddle变量是单个字符,而不是指针。您的函数将超出这些变量的范围,您将有未定义的行为。 -
所以把它改成
*pstart? -
这应该会发出编译器警告,因为递归路径不会返回值。您只调用
CheckString(),而不是将其返回值返回到递归链。是的,pstart和pmiddle需要指向原始字符串的开头和中间,而不是当前实现的那些位置的字符副本。 -
那么我如何将其返回值返回到递归链中?,我将 pstart 更改为 *pstart ..
-
版主注意:请不要破坏您的帖子。发布问题后,您已将内容授权给整个 Stack Overflow 社区(根据 CC-by-SA 许可)。如果您想取消此帖子与您的帐户的关联,请参阅What is the proper route for a disassociation request?
标签: c string pointers recursion