gpt4 book ai didi

c - 从 C 中的字符串中删除子字符串

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

我已经有了用 C 语言从字符串(单词)中删除子字符串的代码,但我不明白。有人可以向我解释吗?它不使用标准库中的函数。我试图自己分析它,但某些部分我仍然不明白 - 我把它们放在评论中。我只需要弄清楚这一切是如何运作的。

谢谢!

#include <stdio.h>
#include <stdlib.h>
void remove(char *s1, char *s2);

int main()
{
char s1[101], s2[101];
printf("First word: ");
scanf("%s", s1);
printf("Second word: ");
scanf("%s", s2);
remove(s1, s2);
printf("The first word after removing is '%s'.", s1);

return 0;
}
void remove(char *s1, char *s2)
{
int i = 0, j, k;
while (s1[i]) // ITERATES THROUGH THE FIRST STRING s1?
{
for (j = 0; s2[j] && s2[j] == s1[i + j]; j++); // WHAT DOES THIS LINE DO?
if (!s2[j]) // IF WE'RE AT THE END OF STRING s2?
{
for (k = i; s1[k + j]; k++) //WHAT DOES THIS ENTIRE BLOCK DO?
s1[k] = s1[k + j];
s1[k] = 0;
}
else
i++; // ???
}
}

最佳答案

这里函数的主要工作是这样的:

-跳过两个字符串之间的公共(public)部分,并将新字符串分配给第一个字符串。

while (s1[i])       // Yes It ITERATES THROUGH THE FIRST STRING s1
{
for (j = 0; s2[j] && s2[j] == s1[i + j]; j++); // Here it skips the part which is
//similar in both

因为这个循环只是增加公共(public)部分的索引,所以这将跳过在 s1 中存储数据。

if (!s2[j])           // IF WE'RE AT THE END OF STRING s2
{
for (k = i; s1[k + j]; k++) //Here it is re assigning the non common part.
s1[k] = s1[k + j];
s1[k] = 0;
}
else
i++; // it is req. if both have more values.
}

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

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