2011-01-06 22 views
8

Wie deklariert man ein zweidimensionales Array von Strings in C++? und wie man diese Zeichenfolge in Dateien schreibt?Initialisierung eines zweidimensionalen Arrays von Strings

+2

Welche Art von Strings? Stringliterale? C Saiten? 'std :: string' Objekte? 'CString' Objekte? 'QString' Objekte? Irgendwelche Unicode-Strings? Verschlüsselte Zeichenfolgen? Irgendeine andere Art von Saiten? In welche Art von Datei müssen Sie sie schreiben? Müssen sie in einer bestimmten Weise in der Datei codiert werden? Haben Sie [ein gutes einleitendes C++ Buch] (http://stackoverflow.com/questions/388242/the-definitive-c++book-guide-and-list)? Wenn ja, haben Sie es konsultiert? Wenn nicht, sollten Sie eins bekommen. –

Antwort

2

Sie können ein mehrdimensionales Array von Strings wie folgt erklären:

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

Natürlich Ihre eigene Breite/Höhe Werte für 137 und 42 :-) Substitution

Es gibt keine „einen richtigen Weg ist "um dieses Array auf die Festplatte zu schreiben. Sie werden im Wesentlichen über das Array iterieren und jeweils eine Zeichenfolge auf die Festplatte schreiben, mit einer Art von geeigneten Trennzeichen und einer Fehlerüberprüfungslogik. Hier ist eine naive Implementierung, die aus einem String pro Zeile schreibt (unter der Annahme, dass die Saiten haben noch keine Zeilenumbrüche in ihnen):

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; 

hoffte, das hilft!

+0

tun 'output.close()' am Ende. –

+2

Kein Bedarf; Wenn das Stream-Objekt den Gültigkeitsbereich verlässt, schließt der Destruktor die Datei. – 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

Deklaration und Initialisierung zusammen:

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

Zum Schreiben Antwort auf Datei, templatetypedef der ist fast in Ordnung, außer dass Sie die Fehlerüberprüfung tun sollen, und die Ausgabedatei-Stream schließen, wenn Sie fertig.

0

Ich nehme an, dass Sie QString Typ haben. Dies sollte std :: string und even (char *) korrekt funktionieren.

QString ** myTwoDimensionalArray; 

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

Das ist es. Jetzt können Sie schreiben, so etwas wie:

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; 
    } 
Verwandte Themen