gpt4 book ai didi

c - 如何使用C反转字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:12 25 4
gpt4 key购买 nike

我想用C语言反转一个字符串。我有点新,所以我很想得到一些帮助和解释。为什么我的解决方案不起作用?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>

char *rev(char *str) {
char *q = str;
int len = strlen(str);
char *p = (char*)calloc(len+1, sizeof(char));
int j=0;
if (NULL == str || len == 1) return str;
for (j = len+1 ; j > 0 ; j-- ) {
p[j]=*q;
q++;
}
return p;
}

int main(int argc, char **argv){
char *t = argv[1];
char *p ;
printf("%s",t);
p=rev(t);
printf("%s",p);
getchar();
return 0;
}

它不工作:(

最佳答案

首先,您很聪明地使用 calloc 来确保您的结果缓冲区末尾有一个零。

但它也把零放在开头!

您的循环终止条件是 j > 0,这意味着您从未在结果中填充槽 0。

因此,当您尝试打印 p 时,它指向的缓冲区中的第一个字符包含 \0 —— 标记字符串的结尾,因此您的结果始终是空字符串

我在 http://codepad.org/QppfYQkm 做了一些“修复” (我没有更改格式,并且我对参数进行了硬编码,因此它是独立的。)

旁白:我删除了您对 if (len == 1) return str 的检查。不要这样做!如果您有一个单字符字符串,您将返回与保存您的参数的缓冲区相同的缓冲区,这意味着对该结果的更改会破坏您的输入。将这些缓冲区分开。

你们真的很亲密。 :)

附录

下面是一些使用命令行参数的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>

char *rev(char *str) {
char *q = str;
int len = strlen(str);
char *p = (char*)calloc(len + 1, sizeof(char));
int j;

if (NULL == str) return NULL;

for (j = len-1 ; j >= 0 ; j--) {
p[j] = *q;
q++;
}
return p;
}

int main(int argc, char **argv) {
if (argc > 1) {
char *t = argv[1];
char *p ;

printf("%s\n",t);
p = rev(t);
printf("%s\n",p);

return 0;
}
}

当我运行它时:

$ gcc rev.c && ./a.out "hello there, reverse me"
hello there, reverse me
em esrever ,ereht olleh
$ gcc rev.c && ./a.out ""


$ gcc rev.c && ./a.out
$

该程序可以很好地处理文本和空字符串。如果没有参数,它会默默地不做任何事情。

关于c - 如何使用C反转字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com