如何推送char数组

How to push char array?

本文关键字:数组 char 何推送      更新时间:2023-10-16

可能重复:
如何在C++中使用数组?

我不知道如何推送一个char数组
例如,如果我在char数组中有"HI.MY.NAME.IS",
我想把一个字符放在中间,然后把字符推到它的右边。
所以它会是类似"嗨,我的,我的。"或类似的东西。

有什么可能的解决方案吗?

使用string::insert

std::string s("test");
s.insert(s.begin()+2, 'c');

没有"自动"推送来重新定位数组中的元素。在最低级别,只有从数组元素读取和向数组元素写入。

这意味着您需要在数组中插入"一个索引"之后复制每个元素。然后,您需要在其插入的索引处设置"inserted"值。

图书馆的例行程序会在你没有注意到的情况下为你做这件事;但是,您应该了解潜在的机制。否则,您可能会觉得在任意索引处插入数组很便宜(通常不是这样)。

//This allocates new memory that you receive responsibility for freeing after use.
char *push(char *charArray, char *charsToPush, int pushPos) {
    char *thePushed = new char[strlen(charArray) +  strlen(charsToPush) + 1];
    memcpy(thePushed, charArray, pushPos);
    memcpy(thePushed + pushPos, charsToPush, strlen(charsToPush));
    memcpy(thePushed + pushPos + strlen(charsToPush), charArray + pushPos, strlen(charArray) - pushPos);
    thePushed[strlen(charArray) +  strlen(charsToPush)] = '';
    return thePushed;
}

要做到这一点,您必须:

  1. 创建一个足够大的新数组,以容纳原始项和新项。无法调整数组的大小
  2. 将所有项目从旧数组复制到新数组,保留新字符的位置
  3. 插入新字符

这相当复杂。但是C++提供了一种更简单的方法——std::string:

#include <string>
#include <iostream>
int main() {
  std::string text = "HI.MY.NAME.IS";
  std::string new_text = text.substr(0, 6) + "SL" + text.substr(7, 6);
  std::cout << new_text << std::endl;
}

该程序打印HI.MY.SLAME.IS。或者,正如@rasmus建议的那样,使用insert更好。

如果您被限制为c字符串或要求在缓冲区中替换它,那么您可以执行以下操作,您的缓冲区必须足够大,以容纳修改后的字符串,因为它会向下推所有字符。也就是说,按照其他人的建议,使用std::string会更好。

// ASSUMES buffer is large enough to store one more char
void insertAt(char* buffer, char insertMe, size_t at)
{
    size_t len = strlen(buffer);
    if (at <= len)
    {
        memcpy(buffer + at + 1, buffer + at, len - at + 1);
        buffer[at] = insertMe;
    }
}
char* string = (char*) malloc(14);
string = "HI.MY.NAME.IS";
realloc(string, 15);
for (int i = 14; i > 5; --i) {
    string[i+1] = string[i];
}
string[5] = 'S';
string[6] = 'L';

给你。。。lol