由于某种原因,我的回文功能无法正常工作,我很乐意提供一些帮助:
代码
int Pal(char *s, int a, int b)
{
if (a>= b)
return 1;
if (s[a] != s[b])
return 0;
return Pal(s, ++a , --b);
}
int main()
{
char *s = "civic";
if (Pal(s , 1, strlen(s)))
printf("YES\n");
else
printf("No\n");
}
它一直打印否,我不知道为什么会这样。
答案 0 :(得分:6)
您输入的功能不正确:
if (Pal(s , 1 ,strlen(s) ))
C和C ++中的数组的起始索引为0。因此,您实际上是从第二个字符开始,到字符串末尾的空终止字节结束。
对于开头和结尾,请使用小于1的值:
if (Pal(s, 0, strlen(s)-1 ))
答案 1 :(得分:1)
使用以下代码:
python -m smtpd -n -c DebuggingServer localhost:1025
需要考虑的几点
可能会进行其他改进,尽管这些改进很小:
示例:
bool isPalindrome(char *str, int startIndex, int endIndex)
{
if ( startIndex >= endIndex)
return true;
if (str[startIndex] != str[endIndex])
return false;
return isPalindrome(str, ++startIndex , --endIndex);
}
int main()
{
char *str = "civic";
if (isPalindrome(str , 0, strlen(str)-1))
printf("YES\n");
else
printf("No\n");
}
答案 2 :(得分:0)
位置strlen(s)
的字符不是字符串中的最后一个字符,而是标记其结尾的\0
字符。如果要检查最后一个,请更改
if (Pal(s , 1, strlen(s)))
作者
if (Pal(s , 0, strlen(s)-1))
(但是请务必先检查字符串s
是否至少包含一个字符,否则表达式将是错误的---您不能为回文检查是否为空字符串---)
字符串索引从0
到少于strlen(s)
的一个字符。