2011-01-06 12 views
8

Jak zadeklarować dwuwymiarową tablicę łańcuchów w C++? a także jak napisać ten ciąg na plikach?inicjalizacja dwuwymiarowej tablicy łańcuchów znaków

+2

Jaką strun? Literały ciągów? Struny C? obiekty 'std :: string'? Obiekty 'CString'? Obiekty 'QString'? Ciągi znaków Unicode? Szyfrowane ciągi? Jakiś inny rodzaj strun? Jakiego rodzaju pliku potrzebujesz do napisania? Czy muszą być one zakodowane w określony sposób w pliku? Czy masz [dobrą wstępną książkę C++] (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list)? Jeśli tak, czy skonsultowałeś się z nim? Jeśli nie, powinieneś go zdobyć. –

Odpowiedz

2

Można zadeklarować wielowymiarową tablicę ciągów tak:

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

Oczywiście, wstawiając własne wartości szerokość/wysokość do 137 i 42. :-)

Nie ma „jeden właściwy sposób "napisać tę tablicę na dysk. Zasadniczo będzie to iteracja nad tablicą zapisującą jeden ciąg na dysk, z odpowiednimi separatorami i logiką sprawdzania błędów. Oto jeden naiwny wdrożenie, które pisze się jednym ciągiem na linię (zakładając, że struny nie ma żadnych nowych linii w nich):

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; 

Nadzieja to pomaga!

+0

wykonaj 'output.close()' na końcu. –

+2

Nie ma potrzeby; gdy obiekt strumienia wykracza poza zakres, destruktor zamknie plik. – 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

deklaracja i inicjalizacja razem:

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

Do pisania do pliku, odpowiedź templatetypedef jest prawie w porządku, z wyjątkiem należy zrobić, sprawdzanie błędów i zamknąć strumienia pliku wyjściowego po zakończeniu.

0

Zakładam, że masz typ QString. Powinno to działać poprawnie na std :: string i even (char *).

QString ** myTwoDimensionalArray; 

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

To wszystko. Teraz można napisać coś takiego:

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; 
    } 
Powiązane problemy