gpt4 book ai didi

C 字符串删除 - 此代码如何工作?

转载 作者:太空狗 更新时间:2023-10-29 16:06:20 27 4
gpt4 key购买 nike

我有一段 C 代码可以完全从字符数组中删除每个第二个字符,使原始数组的大小减半(如果大小为奇数,则减半+1)

..但我不知道它是如何工作的。

void del_str(char string[]) {
int i,j;
for(i=0, j=0; string[i]!=0; i++) {
if(i%2==0) {
string[j++]=string[i];
}
}
string[j]=0;
}

//
example input: 'abcdefgh'
output from that: 'aceg'
what I thought the output would be: 'aacceegg'

我不明白的是

string[j++]=string[i];

我可以编写省略第二个字符的代码,因此输出将是:

'a c e g '

但我无法解决这个问题。

或者,您将如何编写一个程序来完全删除每个第 n 个字符及其在原始数组中的空间? (产生与上述代码相同的输出)

最佳答案

这段代码使用了两个位置索引,ij。最初,两个索引都初始化为零。索引i用于读取; index j 用于写入。

Index i 在循环的每一步递增,因为增量 i++ 在循环的头部。另一方面,索引 j 每隔一次迭代递增,因为 j++ 仅在 i 为偶数时发生。索引 i 总是比索引 j 更接近或更接近字符串的末尾,因为它移动得“更快”。

空终止符被放置在循环结束时 j 的最终位置,以指示字符串结束的新位置。

或许举个小例子更容易理解。考虑 “abcdef” 的初始字符串。它在算法开始时在内存中的表示如下:

'a' 'b' 'c' 'd' 'e' 'f' '\0'

这是在循环的每一步之后它会如何变化:

'a' 'b' 'c' 'd' 'e' 'f' '\0'
'a' 'c' 'c' 'd' 'e' 'f' '\0'
'a' 'c' 'e' 'd' 'e' 'f' '\0'
'a' 'c' 'e' '\0' 'e' 'f' '\0'

由于 C 字符串忽略 '\0' 之后的所有内容,因此 'e' 'f' '\0' 的“尾部”不被视为字符串的一部分.

关于C 字符串删除 - 此代码如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570875/

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