2011-11-09 18 views
1

既存の配列の先頭に文字列を追加しようとしています。配列の先頭に追加

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

memcpyまたはstrcatを使用して配列に追加することができます。しかし、私は既存の配列の先頭に追加したいです。どうやって教えてくれますか?ありがとうございました。

+0

コードブロックの3行目でコンパイルエラーが発生します。 2つのchar *をchar配列にパックしようとしています。 – Antoine

+3

微妙なボキャブラリー調整:*最後に*を付ける、先頭に*を付ける*。 –

答えて

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 ::両端キューがそうでなければ、より効率的であるが、前面に物事を挿入する必要がある場合は、これはにmemcpyまたは類似を使用せずに行うことはできません

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

ベクトルと同じですメモリ内の要素を移動します。配列はメモリの一種であり、あなたはそのメモリの先頭を埋めるので、最初に要素を追加するスペースがありません。現在の要素を配列の先頭から移動し、開始時に要素を挿入する必要があります。そうしないとあなたが任意の場所に要素を挿入することができ、これを行うには非常に最も簡単な方法ではなく文字配列と戦っよりもstd::stringを使用することです

1

の周りに現在の要素を動かすの世話をstd::vector<T>を、使用することを検討してください:

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]; 

あなたの文字列の合計な長さが50未満でなければならない、そうでない場合、あなたは余分な文字に

を失うことになるあなたはまた、リストを使用することができます。あなたは、あなたのコード内のいくつかのミスを持つ文字に

+0

全長は確かに> 176です。その場合、私は何ができますか? – Kiran

+0

int配列[50]を宣言したので50と言った。しかし、あなたが177または他の数字の長さを持つ配列を宣言しても問題はありません。サイズが 'n'の場合は、' for(int i = n-2; i> = 0; i - ) 'という行を使います。 –

1

を書き換えることなく、最初に追加することができるようになります:

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

(私は変数だと思いAを除く)あなたのすべての値は文字(ではありません技術的には、キャストすることができますが、これは正しくありません)。

char firstElement[] = {"F"}; 
char secondElement[] = {"s", "S"}; 

"F"、 "S" と "S" は文字が、文字列(またはcharの*)ではないからである。この2つの配列が、また間違っていますこれにもかかわらず

は、私はあなたの問題を解決する最良の方法はstd:Stringと機能appendを使用することであると思う:

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

memcpystrcat必要に応じ、あなたがC++ではなくCを使用している、活用しますそれの!

+0

Cは 'byte'データ型を持たないので、' char'または 'unsigned char'を使って1バイトを格納するのは珍しいことではありません。 –

0

あなたのコードでは、次の宣言はコンパイルされません。

Aは、あなたはそれが文字列リテラルを表し、あなたが言う文字'F'"F"をしたい定数と宣言されていない

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

です。 char配列を初期化すると、'\0'ヌル文字が暗黙的に追加されることに注意してください。上記と同じ

char firstElement[] = {"F"}; 

、あなたはあまりにも多くのintializersを持って、この場合には、したがって、あなたはコピーを単純化するために's' and 'S'

char secondElement[] = {"s", "S"}; 

を持っている必要があり、C++はあなたに2つの文字列を付加するために使用することができますstd::stringを提供任意の終わり。 C.での配列の先頭に挿入について特別なものは何もありません

std::string first = "F"; 
std::string second = "sS"; 
second.append(first); 
first.append(second); // OR 
1

これは、任意の場所に挿入すると同じだし、それは配列全体シフト関係としては、非効率的です:

  • memcpy(array + 3 * sizeof(char), array, 8 * sizeof(char)); 
    
  • コピーを使用して右にあなたの全体の配列をシフトし、その場所での新要素:

    memcpy(array, firstElement, sizeof(firstElement)); 
    memcpy(array + sizeof(firstElement), secondElement, sizeof(secondElement)); 
    

また、あなたは、単一引用符を使用して文字の配列であるためにあなたの配列の宣言を修正する必要があります。

また、C++でプログラムを書く場合は、std::stringを使用する必要があります。

関連する問題