我想追加一個字符串到現有數組的開頭。追加到數組的開頭
char array[50] = {5,A,0,1,0,0,1,1};
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};
我知道我們可以使用memcpy或strcat追加到數組。但我想追加到我現有的數組的開始。你能告訴我怎麼樣?謝謝。
我想追加一個字符串到現有數組的開頭。追加到數組的開頭
char array[50] = {5,A,0,1,0,0,1,1};
char firstElement[] = {"F"};
char secondElement[] = {"s", "S"};
我知道我們可以使用memcpy或strcat追加到數組。但我想追加到我現有的數組的開始。你能告訴我怎麼樣?謝謝。
不是沒有複製元素 - 任何原因不使用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
你能告訴我如何使用它嗎?因爲我是C++的新手。謝謝。 – Kiran
這不可能不使用memcpy
或類似的工作要做移動內存中的元素。該數組是一段連續的內存,並且已經填充了該內存的開始,因此在開始時沒有空格來追加任何元素。您需要將當前元素從數組的開頭移開,然後可以在開始時插入元素。否則,考慮使用std::vector<T>
,它允許你插入在任意位置的元素,並採取走動
非常簡單的方法需要的元素做到這一點的關心是使用std::string
而不是字符數組作戰:
std::string s = ", world!";
s = "Hello" + s;
我假設你真的在使用字符串,我已經採取了一些步驟。如果它確實是你想要的一系列字符,那麼可以用std::vector
來代替。
我看到你能做的唯一的事情就是把你的數組移到右邊,並在開頭寫第一個元素。
for (int i = 48 ; i >= 0 ; i--)
{
array[i+1] = array[i];
}
array[0] = firstElement[0];
您的字符串的總lenght必須小於50,否則,你將失去多餘的字符
你也可以使用一個列表。您將能夠在一開始追加無需重寫字符
總長度定義> 176。在這種情況下我能做些什麼? – Kiran
我說50是因爲你聲明瞭'int array [50]'。但是如果你使用177或另一個數字聲明一個數組,那麼就沒有問題了。如果大小爲'n',則使用以下這行:for(int i = n-2; i> = 0; i - )'。 –
你在你的代碼的幾個錯誤:
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,趁它!
使用'char'或'unsigned char'來存儲單個字節並不少見,因爲C沒有'byte'數據類型。 –
在您的代碼下面的聲明不會編譯:
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
沒有什麼特別之處在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
。
你的代碼塊的第三行會產生編譯器錯誤。你正試圖在char數組中打包兩個char *。 – Antoine
小調詞彙調整:* append *在最後,* prepend *在開頭。 –