2011-01-06 21 views
8

Come dichiarare una matrice bidimensionale di stringhe in C++? e anche come scrivere questa stringa sui file?inizializzazione di una matrice bidimensionale di stringhe

+2

Che tipo di corde? Stringhe letterali? Stringhe? Oggetti 'std :: string'? Oggetti 'CString'? Oggetti 'QString'? Stringhe Unicode di qualche tipo? Stringhe crittografate? Qualche altro tipo di archi? A che tipo di file hai bisogno di scriverli? Devono essere codificati in un modo particolare nel file? Hai [un buon libro introduttivo in C++] (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list)? Se sì, l'hai consultato? In caso contrario, dovresti prenderne uno. –

risposta

2

È possibile dichiarare un array multidimensionale di stringhe in questo modo:

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

Naturalmente, sostituendo i propri valori di larghezza/altezza per 137 e 42. :-)

Non c'è "un modo giusto "scrivere questo array su disco. Dovrai essenzialmente ripetere l'iterazione dell'array scrivendo una stringa alla volta sul disco, con una sorta di separatori appropriati e una logica di controllo degli errori. Ecco un'implementazione ingenuo, che scrive una stringa per linea (supponendo che le stringhe non hanno a capo in loro):

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; 

Spero che questo aiuti!

+0

fai 'output.close()' alla fine. –

+2

Nessuna necessità; quando l'oggetto flusso esce dall'ambito, il distruttore chiuderà il file. – 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

Dichiarazione e l'inizializzazione insieme:

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

Per la scrittura di file, la risposta di templatetypedef è quasi bene, tranne che si dovrebbe fare il controllo degli errori e chiudere il flusso di file di output quando fatto.

0

Suppongo, che tu abbia tipo QString. Questo dovrebbe funzionare correttamente con std :: string e even (char *).

QString ** myTwoDimensionalArray; 

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

Questo è tutto. Ora, è possibile scrivere qualcosa di simile:

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; 
    } 
Problemi correlati