如何推送char数组?

时间:2012-02-14 22:08:02

标签: c++ c arrays string char

  

可能重复:
  How do I use arrays in C++?

我不知道如何推送一个char数组 例如,如果我在char数组中有“HI.MY.NAME.IS”,则 我想在中间放一个字符,然后将字符向右推 所以它会像“HI.MY.SLAME.IS”之类的东西。

任何可能的解决方案?

6 个答案:

答案 0 :(得分:10)

使用string::insert

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

答案 1 :(得分:4)

没有“自动”推送重新定位数组中的元素。在最低级别,只读取数组元素并写入数组元素。

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

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

答案 2 :(得分:1)

//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)] = '\0';
    return thePushed;
}

答案 3 :(得分:1)

要做到这一点,你必须:

  1. 创建一个足以容纳原始项目和新项目的新数组。数组无法调整大小。
  2. 将所有项目从旧数组复制到新数组,保留新字符的位置。
  3. 插入新字符。
  4. 这非常复杂。但是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。或者,更好的是,使用insert作为@rasmus suggests

答案 4 :(得分:1)

如果你只限于c-strings或要求在缓冲区中替换它,那么你可以做类似下面的事情,但是你的缓冲区必须足够大以容纳修改后的字符串,因为它正在推动所有角色。也就是说,与其他人建议的那样,使用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;
    }
}

答案 5 :(得分:-1)

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

你去......哈哈