gpt4 book ai didi

c - 使用 c 从主字符串中删除子字符串

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

我需要从主字符串中删除子字符串 "hello",现在我已经将 'x' 替换为 'ks' 并且'z''ts' 作为我的作业要求我做的。但现在我想不出删除子字符串 "hello" 的方法,我已经尝试使用 memmove() 但之后 printf 打印 "(空)”

我的代码:

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

void antikorso(char *dest, const char *src) {
const char *p = src;
int i;

for (i = 0; *p != '\0'; i++, p++)
{
if (*p == 'x') {
dest[i++] = 'k';
dest[i] = 's';
}
else if (*p == 'z') {
dest[i++] = 't';
dest[i] = 's';
}
else
{
dest[i] = *p;
}
}

dest[i] = '\0';
printf("\n%s", dest);
char c[10] = "hello";
int j;
while (dest = strstr(dest, c))
memmove(dest, dest + strlen(c), 1 + strlen(dest + strlen(c)));

printf("\n%s", dest);
}


int main(void)
{

const char *lol = "yxi izexeen hello asd hello asd";
char asd[1000];
antikorso(asd, lol);
}

最佳答案

只是你这边的逻辑错误。它打印 NULL 因为在你删除 "hello" 之后,while 循环再次被评估,这导致:

dest = strstr(dest, c);

最终会将 NULL 分配给 dest,这就是您打印的内容。你需要另一个变量来记住原始字符串。

char *original = dest;
char c[10] = "hello";
while (dest = strstr(dest, c))
memmove(dest, dest + strlen(c), 1 + strlen(dest + strlen(c)));

printf("\n%s", original);

这将打印没有"hello"的行。

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

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