我正在尝试将字符串附加到现有数组的开头。
char array[50] = {5,A,0,1,0,0,1,1};
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};
我知道我们可以使用memcpy或strcat追加到数组。但我想附加到现有数组的开头。你能告诉我怎么样吗?谢谢。
答案 0 :(得分:3)
不是没有复制元素 - 任何原因都没有使用c ++ std :: vector?
std::vector<char> array;
array.push_back(5); // adds to end
array.push_back(A);
// insert a new array at beginning
char myarray [] = { 1,2,3 };
array.insert (array.begin(), myarray, myarray+3);
如果你需要在前面插入东西,std :: deque更有效,但在其他方面与向量相同
std::deque<char> array;
array.push_back(5); // adds to end
array.push_back(A);
array.push_front(4); // inserts at front
答案 1 :(得分:1)
最简单的方法是使用std::string
而不是与字符数组作斗争:
std::string s = ", world!";
s = "Hello" + s;
我假设您正在使用字符串,我已经有了一些飞跃。如果它确实是你想要的一系列字符,那么可以使用std::vector
代替。
答案 2 :(得分:1)
我唯一能看到的就是将你的数组移到右边并在开头写下第一个元素。
for (int i = 48 ; i >= 0 ; i--)
{
array[i+1] = array[i];
}
array[0] = firstElement[0];
你的字符串的总长度必须小于50,否则你将失去额外的字符
您也可以使用列表。你可以在开头追加而不重写字符
答案 3 :(得分:1)
您的代码中有几个错误:
char array[50] = {5,A,0,1,0,0,1,1};
你所有的值(不包括A,我猜是变量)都不是字符(从技术上说,它们可以被转换,但这不正确)。
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};
这两个数组也不正确,因为“F”,“s”和“S”不是字符,而是字符串(或char *)。
尽管如此,我认为解决问题的最佳方法是使用std:String
和函数append
:
string str1 ="Frist string";
string str2 ="Second string";
str1.append(str2);
不需要memcpy
也不需要strcat
,您使用的是C ++,而不是C,充分利用它!
答案 4 :(得分:1)
在C中的数组的开头插入没什么特别的。它与在任何地方插入相同,效率低,因为它涉及移动整个数组:
使用
将整个阵列向右移动memcpy(array + 3 * sizeof(char), array, 8 * sizeof(char));
将新元素复制到其位置:
memcpy(array, firstElement, sizeof(firstElement));
memcpy(array + sizeof(firstElement), secondElement, sizeof(secondElement));
此外,您应该使用单引号将数组声明更正为char数组。
正如其他人指出的那样,如果用C ++编写程序,则应使用std::string
。
答案 5 :(得分:0)
如果不使用memcpy
或类似内容移动内存中的元素,则无法执行此操作。数组是一个连续的内存,你已经填满了内存的开头,因此在开始时没有空间来附加任何元素。您需要将当前元素从数组的开头移开,然后您可以在开始时插入元素。否则,请考虑使用std::vector<T>
,它允许您在任意位置插入元素并负责移动当前元素
答案 6 :(得分:0)
在您的代码中,以下声明将无法编译:
A
是常量且未声明的
char arr[50] = {5,A,0,1,0,0,1,1};
你想要一个角色'F'
,当你说,"F"
它代表一个字符串文字。请注意,初始化char数组时会隐式添加'\0'
null字符。
char firstElement[] = {"F"};
与上面相同,在这种情况下你有太多的初始化者,因此你应该有's' and 'S'
char secondElement[] = {"s", "S"};
为了简化副本,C ++为您提供std::string,可用于在任何一端附加两个字符串。
std::string first = "F";
std::string second = "sS";
second.append(first);
first.append(second); // OR