gpt4 book ai didi

c - C 中的字符串反转

转载 作者:行者123 更新时间:2023-11-30 21:19:08 25 4
gpt4 key购买 nike

我只是想通过切换字符串中每个索引的位置来反转字符串顺序。

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

void FirstReverse(char str[]) {
int a = strlen(str);

for(int i=0; i<strlen(str) ;i++){
str[i] = str[a-1];
a-=1;
}
}

int main(void) {
// keep this function call here
FirstReverse(gets(stdin));
return 0;
}

错误:“信号:段错误(核心转储)”

最佳答案

您的代码中存在多个错误。明显的是 gets 使用错误(老实说, that it is used at all )并且它不会以任何方式输出结果。但是,让我们应用一些快速修复方法,对您的逻辑进行最小的更改:

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

void FirstReverse(char str[]) {
int a = strlen(str);

for(int i=0; i<strlen(str) ;i++){
str[i] = str[a-1];
a-=1;
}
}

int main(void) {
char string[100]; // This is going to be our working field where the changes happen
fgets(string, 100, stdin); // read a line of up to 100 characters into "string"
FirstReverse(string); // do the work (this could be chained, like it was originally)
puts(string); // output the result
return 0;
}

现在编译并执行没有失败,但结果是错误的:

In: My favourite string

Out: gnirts ette string

出了什么问题?让我们一步步了解发生的情况:

i                  a
↓ ↓
My favourite string
(program writes the last character [see point 3 below] in place of `M`)

↓ ↓
y favourite string
(program writes `g` in place of `y`)

↓ ↓
g favourite string
(program writes `n` in place of the space)

↓ ↓
gnfavourite string
(program writes `i` in place of `f`)

etc.
ia
↓↓
gnirts eite string
(program writes `t` in place of `i`)

ai
↓↓
gnirts ette string
(program writes `t` in place of `t`)

a i
↓ ↓
gnirts ette string
(program writes `e` in place of `e`)
etc.

这里存在三个问题:

  1. 通过从头开始重写一个字符并从末尾重写另一个字符,您并不是在进行交换。您只需从末尾复制数据到开头(但当然是按相反的顺序)。原件已丢失。

  2. 您实际上经历了两次,因为当 i 达到间隔的一半时,a 不断减小并且它们交叉。现在,i 仍然需要完成循环,并且 a 继续向您已经所在的字符串开头移动。如果您确实进行了交换,那么您会将 1 与 2 交换,然后再次将 2 与 1 交换,从而导致原始内容不变!

  3. (minor) (f)gets 返回的字符串以换行符结尾,因此它成为结果的开头。可能不是您想要的,但有一个简单的修复方法,可以在将字符串输入函数之前将其切掉。

您需要处理其中的每一个,其他答案现在包含一些建议。但我认为运行你的代码并尝试“像机器一样思考”来解释为什么计算机会误解你的意图是有益的。如果通过在临时变量中复制一个字母来交换字母,然后重写 str[i],然后从临时变量中写回 str[a-1],然后停止在 ia 相互交叉之前,您可以亲眼看到您将处理 1 和 2。

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

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