为什么我的回文函数不起作用?
Why is my palindrome function not working?
出于某种原因,我的回文函数无法正常工作,我希望得到一些帮助:
代码
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");
}
它一直打印不,我不知道为什么会这样。
您函数的起点不正确:
if (Pal(s , 1 ,strlen(s) ))
C 和 C++ 中的数组的起始索引为 0。因此您实际上是从第二个字符开始,到字符串末尾的空终止字节结束。
开始和结束都使用少 1 的值:
if (Pal(s, 0, strlen(s)-1 ))
使用以下代码:
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");
}
需要考虑的几点
- 字符数组用于 C 中的字符串。
- C 中的数组的 起始索引 为 0
- C 中的数组 endIndex 是 size - 1.
其他可能的改进,尽管它们非常小:
- 将递归函数的 returnType 作为布尔值(较少内存)。
- 数据成员的名称更清晰。
示例:
char string[]={'c,'i','v','i','c'}; //size=5
// indexes: 0 1 2 3 4
位置 strlen(s)
的字符不是字符串中的最后一个字符 ,而是标记其结束的 [=13=]
字符。如果你想检查最后一个,改变
if (Pal(s , 1, strlen(s)))
来自
if (Pal(s , 0, strlen(s)-1))
(但要注意先检查字符串s
至少有一个字符,否则表达式会出错---空字符串不能检查回文---)
字符串索引从 0
到小于 strlen(s)
的一个字符。
出于某种原因,我的回文函数无法正常工作,我希望得到一些帮助:
代码
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");
}
它一直打印不,我不知道为什么会这样。
您函数的起点不正确:
if (Pal(s , 1 ,strlen(s) ))
C 和 C++ 中的数组的起始索引为 0。因此您实际上是从第二个字符开始,到字符串末尾的空终止字节结束。
开始和结束都使用少 1 的值:
if (Pal(s, 0, strlen(s)-1 ))
使用以下代码:
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");
}
需要考虑的几点
- 字符数组用于 C 中的字符串。
- C 中的数组的 起始索引 为 0
- C 中的数组 endIndex 是 size - 1.
其他可能的改进,尽管它们非常小:
- 将递归函数的 returnType 作为布尔值(较少内存)。
- 数据成员的名称更清晰。
示例:
char string[]={'c,'i','v','i','c'}; //size=5
// indexes: 0 1 2 3 4
位置 strlen(s)
的字符不是字符串中的最后一个字符 ,而是标记其结束的 [=13=]
字符。如果你想检查最后一个,改变
if (Pal(s , 1, strlen(s)))
来自
if (Pal(s , 0, strlen(s)-1))
(但要注意先检查字符串s
至少有一个字符,否则表达式会出错---空字符串不能检查回文---)
字符串索引从 0
到小于 strlen(s)
的一个字符。