如何推送字符数组? [复制]
Posted
技术标签:
【中文标题】如何推送字符数组? [复制]【英文标题】:How to push char array? [duplicate] 【发布时间】:2012-03-06 07:04:39 【问题描述】:可能重复:How do I use arrays in C++?
我不知道如何推送 char 数组。 例如,如果我在 char 数组中有“HI.MY.NAME.IS”, 我想在中间放一个字符并将字符向右推。 所以它会像“HI.MY.SLAME.IS”或类似的东西。
任何可能的解决方案?
【问题讨论】:
显示一些代码,很难理解你在说什么。但听起来你没有使用 C++,你想要<string.h>
标头中的函数。
【参考方案1】:
使用string::insert
。
std::string s("test");
s.insert(s.begin()+2, 'c');
【讨论】:
最好用更合适的惯用解决方案来回答,而不是正确回答一个有问题的问题。这是 C++ 中更好的解决方案! 当然这假设他可以访问字符串头。 我试图用 char 数组,而不是字符串。 但我想这也可以。谢谢!【参考方案2】:没有“自动”推送来重新定位数组中的元素。在最低级别,只有从数组元素读取和写入数组元素。
这意味着您需要将插入“一个索引”之后的每个元素复制到数组中。然后您需要在其插入的索引处设置“插入”值。
库例程会在您不注意的情况下为您执行此操作;但是,您应该了解底层机制。否则,您可能会认为在任意索引处插入数组很便宜(通常情况并非如此)。
【讨论】:
【参考方案3】://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;
【讨论】:
【参考方案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。
【讨论】:
【参考方案5】:如果您仅限于 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;
【讨论】:
【参考方案6】: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';
给你...大声笑
【讨论】:
-1new
和 realloc
不混合,realloc
和具有静态存储持续时间的数据也不混合。
正确,已修复。 “也没有 realloc 和具有静态存储持续时间的数据”是吧?
string = "HI.MY.NAME.IS";
之后,string
指向的是静态存储时长的数据,对静态存储时长的数据调用realloc
是非法的。也许你的意思是strcpy(string, "HI.MY.NAME.IS");
?
我假设他是从某种输入机制接收到“HI.MY.NAME.IS”,只是把它放在那里。以上是关于如何推送字符数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Vue如何将数组复制到本地进行编辑?为啥它适用于字符串而不适用于数组? [复制]
如何使用javascript将字符串数组转换为布尔值? [复制]