如何推送char数组
How to push char array?
可能重复:
如何在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;
}
要做到这一点,您必须:
- 创建一个足够大的新数组,以容纳原始项和新项。无法调整数组的大小
- 将所有项目从旧数组复制到新数组,保留新字符的位置
- 插入新字符
这相当复杂。但是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