1

我正在尝试使用函数 strrev() 反转字符串。我知道 strrev 返回一个指向反转字符串的指针,所以我只需使用 strrev 函数返回初始化一个与原始字符串大小相同的已分配字符串。显然这不是正确的方法,我在该行中收到“不兼容的类型”错误。

这是代码:

int ispalindrome(int n)
{
   char s[10], sr[10];

   itoa(n, s, 10);

   printf("%s", s);

   sr = strrev(s);

   printf("\nReverse: %s", sr);

   if(strcmp(s, sr) == 0)
       return 1;

   else
       return 0;

}
4

2 回答 2

7
sr[10];
sr = strrev(s);

这甚至不能编译——数组是不可分配的。贴出真实代码。

sr(你需要声明char *sr这个才能真正编译。)


除此之外,您的问题是strrev()将字符串反转到位,因此两个字符串将始终比较相等(因为您正在有效地将反转的字符串与其自身进行比较)。你要做的是:

  • 多余的低效方法:创建字符串的副本strrev(),然后strcmp()是原始副本和副本。

  • 非空字符串的更优化方法:


int ispal(const char *s)
{
    const char *p = s + strlen(s) - 1;
    while (s < p)
        if (*p-- != *s++)
            return 0;

    return 1;
}
于 2013-06-05T17:33:20.297 回答
2

好的,做了一些研究,看起来strrev在 Linux 中不可用(如果那是你的平台);签出strrev() 函数在 Linux 中不可用吗?

您可以使用其中建议的替代实现或使用@H2CO3 的答案。

于 2013-06-05T17:52:05.287 回答