用strrev - C反转一个字符串

时间:2013-06-05 17:21:04

标签: c string itoa

我正在尝试使用函数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;

}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

好的,做了一些研究,看起来像strrev在Linux中不可用(如果这是你的平台);看看Is the strrev() function not available in Linux?

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