gpt4 book ai didi

c - 在另一个字符串的中间添加新字符串 - c

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

我的任务是编写一个字符串,然后编写该字符串中需要替换为另一个字符串的部分。我设法让它工作,但如果替换的字符串比需要替换的字符串部分更长,它只会“吃掉”一些字母。我能在这项任务上得到一点帮助吗?工作代码示例:

输入:

This is a beautiful day.
END

输入2:

a be

输入3:

not a bee

预期输出:

This is not a beeautiful day.

我的输出:

This is not a beeful day.

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 1000

main(){
char unos[MAX+1];
int i = 0;
char c;
printf("Enter text. For end type END\n");
while (1){
scanf("%[^\n]%*c", unos, &c);
i = strstr(unos, "END") - unos;
if (i >= 0){
unos[i] = '\0';
break;
}
}
char trazena_zamjena[MAX + 1] = "\0";
char zamjena[MAX + 1];
printf("Enter part that needs to be replaced : ");
i = 0;
do{
scanf("%c", &trazena_zamjena[i]);
if (trazena_zamjena[i] == '\n') {
trazena_zamjena[i] = '\0';
break;
}
i++;
} while (trazena_zamjena[i] != '\n');
printf("Enter replacing text : ");
i = 0;
do{
scanf("%c", &zamjena[i]);
if (zamjena[i] == '\n') {
zamjena[i] = '\0';
break;
}
i++;
} while (zamjena[i] != '\n');
int l = i;
char *ptr;
ptr = strstr(unos, trazena_zamjena);
printf("pointer : %d %p", ptr, ptr);
strncpy(ptr, zamjena, l);
printf("%s\n", unos);
}

最佳答案

让我们忘记字节序。当您在 C 中使用字符串时,您会将一个以 '\0' 结尾的字符序列放入内存中。

假设您有以下字符串 char * str = "string";,其地址为 str。通过使用

ptr = strstr(str, "i");

ptr 值将为 str+3(字符 'i' 的地址)因此,假设您尝试将 'i' 替换为 "ae"

strncpy(ptr, "ae", 2);

将在ptr('i')指向的地址写入'a''e '位于ptr + 1指向的地址(这里是'n'的地址)如果替换的子串太小,则应将后面的字符全部移位。

您可以通过以下方式修改代码末尾

printf("pointer : %d %p", ptr, ptr);
int len_substr = strlen(trazena_zamjena);
if (l > len_substr)
strncpy(ptr + l, ptr + len_substr, strlen(ptr + len_substr));
strncpy(ptr, zamjena, l);

如果您添加的字符串小于要删除的子字符串,您也会遇到类似的问题。

关于c - 在另一个字符串的中间添加新字符串 - c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37706472/

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