替换C中的子字符串

时间:2016-11-09 23:17:09

标签: c string algorithm

我是一个非常新的程序员,我一直很难搞清楚这一点。我看过网上但似乎无法找到明确的答案。我如何在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);

这是我感到困惑的地方,我有索引从哪里开始索引(单词的第一个字符,我知道编辑的时间有多长。我只是不知道如何删除原始字符( s)那里有新的替换它。我想过使用for循环,但我不确定它会起作用。

这是我想要的最终结果:

printf("%s", editedString);  

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

2 个答案:

答案 0 :(得分:0)

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

实施例

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];

用字符串“Earth”替换所需的子串“World”

“HelloWorld” 的 变 “HelloEarth”

答案 1 :(得分:0)

这里遇到的问题是字符串是如何存储在C中的。字符串中的字符串只是存储为char的数组,带有终止空字符(\0)。这些信息可以解答您的问题,以及您尝试做的事情的问题。

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

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