2011-01-06 43 views
8

C++で文字列の2次元配列を宣言するにはどうすればよいですか?また、この文字列をファイルに書き込む方法もあります。2次元配列の文字列を初期化する

+2

文字列のどのような種類:今、あなたのような何かを書くことができますか?文字列リテラル? Cの文字列? 'std :: string'オブジェクト? 'CString'オブジェクト? 'QString'オブジェクト?何らかの種類のUnicode文字列?暗号化された文字列?他の種類の文字列ですか?どのような種類のファイルを書く必要がありますか?ファイル内で特定の方法でエンコードする必要がありますか?あなたは[良い入門C++の本](http://stackoverflow.com/questions/388242/the-definitive-c++book-guide-and-list)を持っていますか?もしそうなら、それを相談しましたか?そうでない場合、あなたは1つを取得する必要があります。 –

答えて

2

あなたはこのように、文字列の多次元配列を宣言することができます。もちろん

std::string myArray[137][42]; 

、137と42 :-)のためにあなた自身の幅/高さの値を代入しない「1つの右の方法はありません

この配列をディスクに書き込むことができます。あなたは本質的に、ある種の適切なセパレータとエラーチェックロジックを使って、一度に1つの文字列をディスクに書き込む配列に対して繰り返し実行します。ここでは、1行に1つの文字列を書き出す1つの素朴な実装では、(文字列はそれらのいずれかの改行を持っていないと仮定して)です:

std::ofstream output("result.txt"); 
for (size_t i = 0; i < 137; ++i) 
    for (size_t j = 0; j < 42; ++j) 
     output << myArray[i][j] << std::endl; 

・ホープ、このことができます!

+0

最後に 'output.close()'を実行します。 –

+2

必要ありません。ストリームオブジェクトが有効範囲外になると、デストラクタはファイルを閉じます。 – templatetypedef

4
typedef std::vector<std::string> StringVector; 
typedef std::vector<StringVector> StringVector2D; 
StringVector2D twoD; 
for (StringVector2D::iterator outer = twoD.begin(); outer != twoD.end(); ++outer) 
    for (StringVector::iterator inner = outer->begin(); inner != outer->end(); ++inner) 
     std::cout << *inner << std::endl; 
3

一緒に宣言と初期化:

std::string myarray[2][3] = { 
    { "hello", "jack", "dawson" }, 
    { "hello", "hello", "hello" } 
}; 

ファイルへの書き込みについては、templatetypedefの答えは、エラーチェックを行い、完了したら、出力ファイルストリームを閉じる必要がありますを除いて、ほとんど大丈夫です。

0

私はあなたがQString型を持っていると仮定します。これはstd :: stringとeven(char *)に対して正しく動作するはずです。

QString ** myTwoDimensionalArray; 

myTwoDimensionalArray = new QString*[size_x]; 
for(int i=0; i<size_x; i++) myTwoDimensionalArray[i] = new QString[size_y]; 

これだけです。

myTwoDimensionalArray[x][y] = "Hello, World!"; 
0
#include<iostream> 
#include<vector> 
using namespace std; 

    main() 
    { 
    vector< vector<string> > m2m; 
    vector<string> A, B; 
    vector< vector<string> >::iterator inter_i; 
    vector<string>::iterator inter_j; 

    A.push_back("micro"); 
    A.push_back("soft"); 
    A.push_back("bilgates"); 
    B.push_back("linux"); 
    B.push_back("unix"); 
    B.push_back("ken dennish"); 

    m2m.push_back(A); 
    m2m.push_back(B); 


    cout<<endl<<" USing iterator : "<<endl; 

    for(inter_i=m2m.begin();inter_i!=m2m.end();inter_i++) 
    { 
     for(inter_j=(*inter_i).begin();inter_j!=(*inter_i).end();inter_j++) 
     { 
     cout<<*inter_j<<"  "; 
     } 
     cout<<endl; 
    } 

    return 0; 
    } 
関連する問題