【发布时间】:2021-05-12 10:38:21
【问题描述】:
我正在编写一个 C 函数来检查字符串是否为回文。它接受一个指向字符串的指针和一个表示字符串长度的 int。我的想法是检查字符串开头和结尾的字符,如果它们相同,则增加指针,减少长度,并继续检查直到它们相等或长度变为0(这可能是不正确的基本情况)。
我担心的是,当函数被调用时,char 指针递增没有问题,我可以看到它查看正确的字符。长度 int 像它应该的那样递减。但是,当我使用语句 *(p_string + length - 1) 时,尽管指针 p_string 和长度 int 在每次调用函数时都正确更新,但它一遍又一遍地查看相同的字符。甚至尝试
*(p_string + length) 产生同样的问题。
如果长度和 p_string 都正确更新,我不明白为什么这个语句会一遍又一遍地返回相同的字符。
代码:
int is_palindrome(char* p_string, int length)
{
//This is a test statement, the "length - 1" everywhere is to avoid looking at the '\0' character
//during the first call
printf("%c %c %d %p\n", *(p_string), *(p_string + length - 1), (length - 1), (p_string + length));
if (length == 0)
{
return 1;
}
else if (*(p_string) != *(p_string + length - 1))
{
return 0;
}
else
{
return is_palindrome((p_string + 1), (length - 1));
}
}
int main()
{
char* p_string = "tacocat";
printf("\n%d", is_palindrome(p_string, 7));
return 0;
}
【问题讨论】:
-
你在开头剪掉一个字符,在结尾剪掉一个字符,这样就变成了两个字符。
is_palindrome((p_string + 1), (length - 2)); -
您也可以将 length == 1 视为基本情况。
-
使用
is_palindrome((p_string + 1), (length - 2));和length == 1似乎可以解决问题。谢谢!!
标签: c recursion c-strings palindrome function-definition