2011-11-09 72 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