我不知道如何推送一个char数组 例如,如果我在char数组中有“HI.MY.NAME.IS”,则 我想在中间放一个字符,然后将字符向右推 所以它会像“HI.MY.SLAME.IS”之类的东西。
任何可能的解决方案?
答案 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)
要做到这一点,你必须:
这非常复杂。但是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';
你去......哈哈