How to push char array?
本问题已经有最佳答案,请猛点这里访问。
0
我不知道如何推送char数组。例如,如果char数组中有"hi.my.name.is",我想把一个木炭放在中间,然后把它推到右边。所以应该是"嗨,我的,砰,是"之类的。
有什么可能的解决办法吗?
使用
1 2 | std::string s("test"); s.insert(s.begin()+2, 'c'); |
没有"自动"推送可以重新定位数组中的元素。在最低级别,只有从数组元素中读取并写入数组元素。
这意味着您需要在数组中插入"一个索引"之后复制每个元素。然后需要在插入的索引处设置"inserted"值。
库例程将在您不注意的情况下为您执行此操作;但是,您应该了解底层机制。否则,您可能会有这样的印象:在任意索引处插入数组是很便宜的(通常情况下不是这样)。
如果限制为C字符串或要求在缓冲区中替换它,那么可以执行如下操作,但缓冲区必须足够大,以容纳修改后的字符串,因为它会将所有字符向下推。也就是说,你最好像其他人建议的那样使用
1 2 3 4 5 6 7 8 9 10 11 | // 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; } } |
要做到这一点,你必须:
这很复杂。但是C++提供了一种更简单的方法-EDCOX1,1:
2这个程序打印
1 2 3 4 5 6 7 8 9 | //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; } |
1 2 3 4 5 6 7 8 9 | 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'; |
给你……哈哈