这是代码的一部分,它描述了一个反转字符串字符的功能
(基于C中Brian W. Kernighnan编程的练习1-19)...
(我用Google搜索了各种文本反转功能,但所有这些都是指针或使用strrev(),但我不知道指针是什么......我也不想使用strrev(),因此我做了一个反向字符串函数,因为作者希望它是........)
<击>
功能:
void reverse(char s[])
{
int i , n ;
char j ;
i = 0 ;
while(s[i] != '0') //And not EOF
{
++n;
}
for(i = 0; i < n; ++i)
{
j = s[i] ;
s[i] = s[n - 1] ;
s[n - 1] = j ;
}
}
但是我认为覆盖数组很糟糕,整个功能似乎都很糟糕。
PS:如果你在这里检查并帮助我完成整个代码会很棒,因为如果我在这里发布它会是offtopic,代码的主要返回0 ;但它仍然无法工作....
击>
[编辑] 好的我很抱歉让你输入错字...我无法删除这个问题,因为它有赞成的答案,但我很抱歉....
正确的功能是:
void reverse(char s[])
{
int i, l;
char temp;
for (l = 0; s[l] != '\0'; ++l);
l--;
for (i = 0; i < l; ++i) {
temp = s[i];
s[i] = s[l-1];
s[l-1] = temp;
--l;
}
}
完整代码在这里:
代码工作在这里:
更新:
我为“你好”这个词创建了一个正确且有效的解决方案:
#include <stdio.h>
int main(void)
{
char s[] = "hello";
char temp;
// do the swapping here..
temp = s[0];
s[0] = s[4] ;
s[4] = temp ;
temp = s[1] ;
s[1] = s[3] ;
s[3] = temp ;
temp = s[2] ;
s[2] = s[2] ;
s[2] = temp ;
printf("%c, %s ", temp, s);
}
答案 0 :(得分:4)
我不知道你在哪里得到这段代码,但它确实很破碎:
n
永远不会被初始化。这是未定义的行为。
while循环根本不会终止,因为它会将char
与不在char
范围内的值进行比较。
while循环无法做任何明智的事情,因为它的身体无法改变循环条件。
for循环用一个单独的数组元素交换所有字符,这有效地将字符串向右旋转一个字符。但无论如何,该计划永远不会达到这一点。
答案 1 :(得分:3)
循环
while(s[i] != EOF)
{
++n;
}
似乎错了。
0
检查字符串结尾,而不是通过EOF
。i
,因此您始终选中s[0]
。