2011-11-09 41 views
1

我想追加一个字符串到现有数组的开头。追加到数组的开头

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

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

+0

你的代码块的第三行会产生编译器错误。你正试图在char数组中打包两个char *。 – Antoine

+3

小调词汇调整:* append *在最后,* prepend *在开头。 –

回答

2

不是没有复制元素 - 任何原因不使用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 
+0

你能告诉我如何使用它吗?因为我是C++的新手。谢谢。 – Kiran

0

这不可能不使用memcpy或类似的工作要做移动内存中的元素。该数组是一段连续的内存,并且已经填充了该内存的开始,因此在开始时没有空格来追加任何元素。您需要将当前元素从数组的开头移开,然后可以在开始时插入元素。否则,考虑使用std::vector<T>,它允许你插入在任意位置的元素,并采取走动

1

非常简单的方法需要的元素做到这一点的关心是使用std::string而不是字符数组作战:

std::string s = ", world!"; 
s = "Hello" + s; 

我假设你真的在使用字符串,我已经采取了一些步骤。如果它确实是你想要的一系列字符,那么可以用std::vector来代替。

1

我看到你能做的唯一的事情就是把你的数组移到右边,并在开头写第一个元素。

for (int i = 48 ; i >= 0 ; i--) 
{ 
    array[i+1] = array[i]; 
} 
array[0] = firstElement[0]; 

您的字符串的总lenght必须小于50,否则,你将失去多余的字符

你也可以使用一个列表。您将能够在一开始追加无需重写字符

+0

总长度定义> 176。在这种情况下我能做些什么? – Kiran

+0

我说50是因为你声明了'int array [50]'。但是如果你使用177或另一个数字声明一个数组,那么就没有问题了。如果大小为'n',则使用以下这行:for(int i = n-2; i> = 0; i - )'。 –

1

你在你的代码的几个错误:

char array[50] = {5,A,0,1,0,0,1,1}; 

你所有的值(不包括A,我的猜测是一个变量)不是字符(在技​​术上,他们可能会被铸造,但这是不正确的)。因为“F”,“s”和“S”不是字符,而是字符串(或char *),所以这两个数组也是不正确的。

尽管这样,我认为解决问题的最好办法是使用std:String和功能append

string str1 ="Frist string"; 
string str2 ="Second string"; 
str1.append(str2); 

没有memcpy也不需要,您正在使用C++ strcat,不C,趁它!

+0

使用'char'或'unsigned char'来存储单个字节并不少见,因为C没有'byte'数据类型。 –

0

在您的代码下面的声明不会编译:

A是恒定的,未申报

char arr[50] = {5,A,0,1,0,0,1,1}; 

你想要一个字符'F',当你说,"F"它代表一个字符串。请注意,'\0'空字符在初始化char数组时隐式添加。

char firstElement[] = {"F"}; 

与上述相同,在这种情况下,你有太多intializers,因此应该有'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 
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