我正在尝试用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;
}
现在它可以工作,但仅适用于第一个字符和中间它不会移动以检查下一个字符 帮助某人穿什么???
最佳答案
正如@some-programmer-dude所说,pstart
和pmiddle
只是被分配了str[0]
值的字符变量> 和 str[(strlen(str) - 1)/2]
而不是它们各自的地址。在该函数中,您传递 pmid
和 pstart
的地址。您应该按如下方式更改代码-
替换 pmid 和 pstart。相反,将它们更改为指针 -
char* pstart,pmid;
pstart = &str[0];
pmiddle = &str[(strlen(str) - 1) / 2];
关于C - 字符串递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219657/