替换C中的子字符串

替换C中的子字符串,c,string,algorithm,C,String,Algorithm,我是一个非常新的程序员,我一直很难弄明白这一点。我在网上查过,但似乎找不到明确的答案。如何用C中的另一个子字符串替换所需的子字符串 我基本上希望用户能够编辑他们的字符串,如果他们想 我知道如何获得以下信息: 从何处开始进行编辑的索引 要添加的新子字符串的长度 我想知道如何插入新的子字符串并删除旧的子字符串 任何帮助都将不胜感激 这是我的代码: int length; char firstString[100]; char editIndex[100]; char newString[100]

我是一个非常新的程序员,我一直很难弄明白这一点。我在网上查过,但似乎找不到明确的答案。如何用C中的另一个子字符串替换所需的子字符串

我基本上希望用户能够编辑他们的字符串,如果他们想

我知道如何获得以下信息:

  • 从何处开始进行编辑的索引

  • 要添加的新子字符串的长度

我想知道如何插入新的子字符串并删除旧的子字符串

任何帮助都将不胜感激

这是我的代码:

int length;
char firstString[100];
char editIndex[100];
char newString[100]; 
Char editedString[100];

printf("Enter your string: \n");
fgets(firstString, 100, stdin);

printf("Enter the word from which you would like to start editing: \n");
fgets(editIndex, 100, stdin);

printf("What substring would you like there instead?\n");
fgets(newString, 100, stdin);

length = strlen (newString);
这就是我感到困惑的地方,我有从哪里开始索引的索引(单词的第一个字符,我知道编辑需要多长时间。我只是不知道如何删除原来的字符并用新字符替换。我曾想过使用for循环,但我不确定它是否有效

这就是我想要的最终结果:

printf("%s", editedString);  

然后打印用户所做的编辑。

您将需要一个循环,该循环从开始编辑的位置的索引进行迭代,并在索引是子字符串的长度时结束,从设置字符的起始点开始。需要小心不要超过原始字符串的长度

范例

char theString[10] = {'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'};
char theSubString[5] = {'E', 'a', 'r', 't', 'h'};

for (int i = 0; i < 5, i++)
    theString[5 + i] = theSubString[i];
charthestring[10]={'H','e','l','l','o','W','o','r','l','d'};
字符子串[5]={'E','a','r','t','h'};
对于(int i=0;i<5,i++)
字符串[5+i]=子字符串[i];
这将用字符串“Earth”替换所需的子字符串“World”

“HelloWorld” 变成
“HelloEarth”

您将需要一个循环,该循环从开始进行编辑的位置的索引进行迭代,并在索引是子字符串的长度时结束,从起始点开始一直设置字符。需要小心不要超过原始字符串的长度

范例

char theString[10] = {'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'};
char theSubString[5] = {'E', 'a', 'r', 't', 'h'};

for (int i = 0; i < 5, i++)
    theString[5 + i] = theSubString[i];
charthestring[10]={'H','e','l','l','o','W','o','r','l','d'};
字符子串[5]={'E','a','r','t','h'};
对于(int i=0;i<5,i++)
字符串[5+i]=子字符串[i];
这将用字符串“Earth”替换所需的子字符串“World”

“HelloWorld” 变成
“HelloEarth”

您在这里面临的问题是字符串如何存储在C中。C中的字符串仅存储为
char
s的数组,带有一个终止的空字符(
\0
)。这些信息可以解答您的问题,也可以解决您的问题

问题是,由于字符串保存为数组,因此您尝试插入的字符串的长度必须与要删除的字符串的长度相同。否则,如果新字符串比旧字符串短,您将无法完全删除旧字符串,并且如果新字符串比旧字符串长,您将无法覆盖其他字符包含在旧字符串中。为了实现这一点,使字符串可以具有不同的长度,您的代码必须考虑字母数量的变化,并相应地在单词中移动其他字母。不要忘记,如果您将字母进一步向下移动字符串,您还必须移动末尾的空字符,并且你不能超出数组的末尾


不过,解决方案是,因为它只是一个字符数组,所以可以访问(并更改)单个字符只需使用数组下标。如果可以找到子字符串的索引,则只需逐字复制新字符串。

这里面临的问题是字符串如何存储在C中。C中的字符串只需存储为
char
s的数组,并带有一个终止的空字符(
\0
).这些信息会引出你问题的答案,以及你试图做什么的问题

问题是,由于字符串保存为数组,因此您尝试插入的字符串的长度必须与要删除的字符串的长度相同。否则,如果新字符串比旧字符串短,您将无法完全删除旧字符串,并且如果新字符串比旧字符串长,您将无法覆盖其他字符包含在旧字符串中。为了实现这一点,使字符串可以具有不同的长度,您的代码必须考虑字母数量的变化,并相应地在单词中移动其他字母。不要忘记,如果您将字母进一步向下移动字符串,您还必须移动末尾的空字符,并且你不能超出数组的末尾


不过,解决方案是,因为它只是一个字符数组,所以可以访问(并更改)单个字符只需使用数组下标。如果你能找到子字符串的索引,你可以简单地一个字母一个字母地复制新字符串。

Hi,欢迎使用StackOverflow!如果你能发布到目前为止你拥有的代码以及你尝试过的代码,它将真正帮助其他用户帮助你。Hi,欢迎使用StackOverflow!如果你能发布你拥有的代码“到目前为止,您所做的一切都将真正帮助其他用户帮助您。@kirkosaur,请注意,许多文字处理器将使用字符串的链接列表(单词/行/x-max-length字母组),而不是一个长数组。这允许对长节进行微观管理。也就是说,这将允许您将“Hello”、“World”替换为“Hello”“Mother”只需将“Hello”链接到新字符串(“Mother”)并释放“World”字符串即可。每个单词都可以有一个空格指示符(后面是什么?空格?新行?无?),空单词可以用于多个空格。@kirkosar,请注意,许多字处理器都会使用一个字符串链接列表(单词/行/x-max-length字母组),而不是一个长数组。这允许对长节进行微观管理