C ++将String插入到特定位置的另一个String中

时间:2018-02-21 02:46:47

标签: c++

我有一个我自己构建的自定义String类。我正在尝试构建一个将字符串插入指定位置的自定义插入函数。

例如:

"tesanimalt"

将返回:

String& String::insert(int pos, const String& str) {
   char newString[100];
   strncpy(newString, chars, pos);
   newString[pos] = '\0';
   strcat(newString, str.chars);
   strcat(newString, chars + pos);
   return *this;
}

到目前为止:

foldr

1 个答案:

答案 0 :(得分:0)

代码存在很多问题,其中一个问题是您的String似乎不包含任何实际存储空间。您改为将本地数组作为临时变量分配,然后将其丢弃。

如果没有MCVE,就无法解决这个问题,因为我们无法看到String应该如何工作。似乎有某种名为chars的成员,你可能想复制到那个成员。但是,如果它包含分配有malloc()new[]的缓冲区,则如果 m 是封闭字符串的长度,则可能 n 插入字符串的长度,并插入位置 i

  1. 将目标字符串的缓冲区重新分配给其新大小(两个字符串的大小之和,不带终止空值,加上一个字节表示终止空值)。或者,分配一个新缓冲区并复制封闭字符串的第一个 i 元素。
  2. 将已调整大小的缓冲区右侧的封闭字符串 n 元素的 i 移位到 n
  3. 复制字符串以插入位置 i i + n -1。
  4. 将终止空值写入 m + n 的位置。
  5. 由于您似乎想要修改封闭字符串,因此如果您创建了新缓冲区,请取消分配旧缓冲区。如果重新分配缓冲区,请将chars设置为可能更改的值。