2012-03-31 15 views
4

charの配列を別の配列に追加できるコマンドはありますか?理論的にはこのように動作します何か:C++のChar配列の末尾に追加

//array1 has already been set to "The dog jumps " 
//array2 has already been set to "over the log" 

append(array2,array1); 
cout << array1; 

//would output "The dog jumps over the log"; 

これは私が思うだろう作るためにとても簡単機能ですが、私はそれのためにコマンドで構築されたがないだけで驚いています。

* 編集

私は、配列のサイズを変更することを意味するものではありませんでした、より明確にされている必要があります。 array1が50文字に設定されていて、そのうちの10文字しか使用していなかった場合でも、40文字を使用できます。私は基本的には次のような自動コマンドを考えていました:

//assuming array1 has 10 characters but was declared with 25 and array2 has 5 characters 
int i=10; 
int z=0;  
do{ 
    array1[i] = array2[z]; 
    ++i; 
    ++z; 
}while(array[z] != '\0'); 

私は構文がうまくいくと思います。

+0

C++には単一の完全な種類の「アレイ」はありません。 –

答えて

12

C++の文字列クラス(ひどい教えC++ imho)を使用することが許可されていない場合は、生の安全な配列バージョンwouこのようなものを見てください。

#include <cstring> 
#include <iostream> 

int main() 
{ 
    char array1[] ="The dog jumps "; 
    char array2[] = "over the log"; 
    char * newArray = new char[std::strlen(array1)+std::strlen(array2)+1]; 
    std::strcpy(newArray,array1); 
    std::strcat(newArray,array2); 
    std::cout << newArray << std::endl; 
    delete [] newArray; 
    return 0; 
} 

これは、あなたがいくつかの定義済みのMAX_SIZEを仮定せずに連結をやっている配列に十分なスペースが確保されます。唯一の要件は、あなたの文字列がヌル文字で終了することです。通常、あなたが変わった固定長の文字列ハッキングをしていない限りそうです。

編集、「十分なバッファ領域」という仮定で安全なバージョン:

#include <cstring> 
#include <iostream> 

int main() 
{ 
    const unsigned BUFFER_SIZE = 50; 
    char array1[BUFFER_SIZE]; 
    std::strncpy(array1, "The dog jumps ", BUFFER_SIZE-1); //-1 for null-termination 
    char array2[] = "over the log"; 
    std::strncat(array1,array2,BUFFER_SIZE-strlen(array1)-1); //-1 for null-termination 
    std::cout << array1 << std::endl; 
    return 0; 
} 
+0

質問は、最初の配列に2番目の配列を追加することですが、新しい配列を作成しました! – deepmax

+0

@MasoudM。元の質問は、2つのchar配列を追加しなければならないと述べました。アレイの再利用の明確な要件はありませんでした。この要件があっても、 "固定バッファサイズ"はC++(実際には一般的な配列)で行われていないため、まともな答えです。私は追加された要件でより安全なバージョンを追加しました。 – KillianDS

+0

あなたの答えを編集しました。元の質問は「別の文字に**の配列を追加できるコマンドがありますか?」でした。 – deepmax

1

違法なため、組み込みのコマンドはありません。一度宣言された配列のサイズは変更できません。

あなたが探しているのは、std::vectorです。これは、動的配列をシミュレートするためのものです。std::stringです。

std::string first ("The dog jumps "); 
std::string second ("over the log"); 
std::cout << first + second << std::endl; 
+0

配列*が宣言される前に*のサイズを変更することさえできません。サイズはタイプの* part *です。あなたが言っていることは、「宣言されたintをfloatに変更することはできません」ということです。 –

+0

@KerrekSBサイズのない配列型は不完全ですが、それでも型です。ただし、その場合は、宣言されたサイズを変更することができます:D。 Luchianが言っていることははっきりしているようです。明確に定義された配列オブジェクトは不変のサイズを持っています。 – Potatoswatter

+0

@Potatoswatter:あなたはそうです、extern int a [];のように、externで不完全な型を実際に宣言できることを忘れていました。いい視点ね。 (しかし、あなたは*サイズを変更することはできません。*指定するだけです*決定を単に延期することができます) –

4

あなたの配列が(ケースのようです)、文字配列の場合、あなたはstrcat()を必要としています。
追加先の配列には、追加されたデータを格納するのに十分なスペースが必要です。 C++で

、あなたがstd::stringを使用してオフに非常に優れていると、あなたはstd::string::append()

+1

@TaylorHuston:私はそう思っています。割り当てや宿題関連のQのほとんどは、 C++の根幹を成すC++の機能を使用しないという規定だから、これが私の選択肢の両方を提供した理由です.strcat()またはstrncat()(http://www.cplusplus.com/reference/clibrary/cstring/strncat /)は、この場合に使用する必要があります。使用法の詳細については、リンクを確認してください。 –

1

を使用することができますあなたはarray1配列のための十分なスペースを持っており、array2array1に連絡することをstrcatのようなものを使用する必要があります。

char array1[BIG_ENOUGH]; 
char array2[X]; 
/* ......    */ 
/* check array bounds */ 
/* ......    */ 

strcat(array1, array2); 
関連する問題