2011-01-06 20 views
8

2 + + dizgisi dizeleri C++ olarak nasıl bildirilir? ve ayrıca bu dize dosyalara nasıl yazılır?2 boyutlu dizge dizisini başlatılıyor

+2

Ne tür: Şimdi sen böyle bir şey yazabilirim? Dize değişmezleri? C dizeleri? std :: string' nesneleri? 'CString' nesneleri? QString nesnesi? Bir çeşit unicode dizeleri mi? Şifreli dizeler? Başka bir çeşit ip mi? Ne tür bir dosyaya yazman gerekiyor? Dosyada belirli bir şekilde kodlanması gerekiyor mu? [İyi bir C++ kitabı var mı?] (Http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list) var mı? Eğer öyleyse, ona danıştınız mı? Eğer değilse, bir tane almalısın. Sonunda –

cevap

2

Böyle dizeleri çok boyutlu bir dizi bildirebilirsiniz: Elbette

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

, 137 ve 42. :-) için kendi genişlik/yükseklik değerleri yerine hayır "tek bir doğru yol yoktur

"bu diziyi diske yazmak. Temel olarak, bir dizi diske, bir dizi uygun ayırıcı ve hata denetimi mantığı ile bir dizgi yazmayı sürdüreceksiniz. Bu yardımcı olur

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; 

Umut: İşte (dizeleri bunlardan her yeni satırı olmadığını varsayarak) Her satıra bir dize yazar bir naif uygulanması, bu! Birlikte

+0

do 'output.close()' yapın. –

+2

Gerek yok; Akış nesnesi kapsam dışına çıktığında, yıkıcı dosyayı kapatacaktır. – 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

Deklarasyonu ve başlatma: Eğer hata denetimi yapmak ve bittiğinde çıktı dosyası akışı kapatmalıdır hariç dosyasına yazılırken için

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

, templatetypedef cevabı neredeyse gayet iyi.

0

Sanırım QString türünüz var. Bu std :: string ve hatta (char *) düzgün çalışması gerekir.

QString ** myTwoDimensionalArray; 

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

İşte bu kadar. dizeleri

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; 
    } 
İlgili konular