附加到数组的开头

时间:2011-11-09 05:54:24

标签: c++ c

我正在尝试将字符串附加到现有数组的开头。

char array[50] = {5,A,0,1,0,0,1,1};
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};

我知道我们可以使用memcpy或strcat追加到数组。但我想附加到现有数组的开头。你能告诉我怎么样吗?谢谢。

7 个答案:

答案 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