C语言中的反向字符串函数写得不好吗?/如何使这段代码更好?
下面是代码的一部分,它描述了一个反转字符串字符的函数 (基于Brian W.Kernighnan C语言编程练习1-19)…C语言中的反向字符串函数写得不好吗?/如何使这段代码更好?,c,function,C,Function,下面是代码的一部分,它描述了一个反转字符串字符的函数 (基于Brian W.Kernighnan C语言编程练习1-19)… (我在谷歌上搜索了各种文本反转函数,但都是指针或使用strrev(),但我不知道指针是什么……也不想使用strrev(),因此我按照作者的要求制作了一个反转字符串函数……。) 职能: void reverse(char s[]) { int i , n ; char j ; i = 0 ; while(s[i] != '0') //And
(我在谷歌上搜索了各种文本反转函数,但都是指针或使用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 ;
}
}
void reverse(字符s[])
{
inti,n;
查尔j;
i=0;
而(s[i]!='0')//而不是EOF
{
++n;
}
对于(i=0;i
但是,我认为覆盖数组是不好的,而且整个函数似乎有问题。附言:如果你在这里检查并帮助我处理整个代码,那就太好了,因为如果我在这里发布,代码的主返回值为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;
}
}
void reverse(字符s[])
{
int i,l;
焦炭温度;
对于(l=0;s[l]!='\0';++l);
l--;
对于(i=0;i
完整代码如下:
代码工作在这里:
更新: 我为“hello”一词创建了一个正确且有效的解决方案:
#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);
}
#包括
内部主(空)
{
char s[]=“你好”;
焦炭温度;
//在这里交换。。
温度=s[0];
s[0]=s[4];
s[4]=温度;
温度=s[1];
s[1]=s[3];
s[3]=温度;
温度=s[2];
s[2]=s[2];
s[2]=温度;
printf(“%c,%s”,温度,s);
}
循环
while(s[i] != EOF)
{
++n;
}
这似乎是错误的
0
检查字符串结束,而不是通过EOF
检查i
,因此始终选中s[0]
我不知道你是从哪里得到这段代码的,但实际上它已经完全崩溃了:
n
从未初始化。这是未定义的行为char
与不在char
范围内的值进行比较要求改进和批评功能代码的问题更适合于。C中的字符串通常以nul结尾(
0
或'\0'
),不是EOF
,它是一个负整数。@Juhana但是既然我有一个仅为47@Juhana这段代码根本不起作用。你的while是一个无止境的循环,你对n所做的是未定义的行为,那么我应该把它设为s[I]=“0”@ArchKudo不,你应该做s[i]!=0
@ArchKudo,如前所述,另外don=0编码>并使用s[n]!=0
@ArchKudo您离我们越来越近了。它仍然存在一个问题,但是为什么不试着编译代码,看看它是否符合您的要求呢?通过这种方式,您可以学会自己调试代码,这对于学习编程至关重要。@glglglgl实际上,循环for(n=0;s[n]!='\0';++n)
正常,它正确地递增n
,直到它指向终止的空字节。然而,下面的陈述并非如此。