我必须使用一个递归函数,给定一个字符串,说明它是否是回文。
我对这个练习没有任何问题,但我真的不明白为什么这段代码会按照要求做。特别是,我不知道为什么 strlen(char*) 函数不会像 IndexOutOfRange 那样抛出异常(我知道它是一个 OOP 概念,但我不知道如何解释自己)
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
bool IsPalindrome(char str[],int index){
if (index>0){
if (str[index]==str[strlen(str)-1-index])
return IsPalindrome(str,index-1);
else
return false;
}
else{
if (str[index]==str[strlen(str)-1])
return true;
else
return false;
}
}
int main()
{
char A[100];
gets(A);
if (IsPalindrome(A,strlen(A)))
printf("palindrome");
else
printf("not palindrome");
getch();
return 0;
}
为什么我不必放:
if (IsPalindrome(A,strlen(A)-1))
它仍然有效?
我正在使用!Orwell 的 Dev-C++ with TDMGCC 编译器 64 位
您的代码可能会导致异常,它按预期工作的事实纯粹是运气。
您是第一次使用参数 index
= strlen(str)
调用该函数。然后,您正在执行等效于str[-1]
str[strlen(str)-1-index]
。
str[strlen(str)]
,正如 CmdrMoozy 指出的那样,总是 null,因此要使函数成功,字符串之前的字节(甚至不能保证可读)也必须为 null。显然,这种情况在您的环境中很常见,但当然它并不可靠。
在 C 中,字符串以 null 结尾。这意味着,对于字符串:
"Hello, world!"
最后还有一个额外的字符,即