我正在尝试使用函数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;
}
答案 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的答案。