2011-01-06 18 views
8

सी ++ में तारों की 2 आयामी सरणी कैसे घोषित करें? और फाइलों पर इस स्ट्रिंग को कैसे लिखना है?तारों की एक 2 आयामी सरणी शुरू करना

+2

तार किस तरह: अब, आप की तरह कुछ लिख सकता है? स्ट्रिंग अक्षर? सी तार? 'std :: string' ऑब्जेक्ट्स? 'सीएसटींग' ऑब्जेक्ट्स? 'क्यूस्ट्रिंग' ऑब्जेक्ट्स? यूनिकोड तार किसी तरह का? एन्क्रिप्टेड स्ट्रिंग्स? कुछ अन्य प्रकार के तार? आपको उन्हें किस प्रकार की फाइल लिखने की आवश्यकता है? क्या उन्हें फ़ाइल में किसी विशेष तरीके से एन्कोड किया जाना चाहिए? क्या आपके पास [एक अच्छी प्रारंभिक सी ++ पुस्तक] है (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list)? यदि हां, तो क्या आपने इसका परामर्श लिया है? यदि नहीं, तो आपको एक प्राप्त करना चाहिए। –

उत्तर

2

आप इस तरह तार की एक बहुआयामी सरणी घोषणा कर सकते हैं:

std::string myArray[137][42]; 
बेशक

, 137 और 42 :-) के लिए अपनी खुद की चौड़ाई/ऊंचाई मूल्यों प्रतिस्थापन

नहीं "एक सही तरीका उपलब्ध नहीं है "इस सरणी को डिस्क पर लिखने के लिए। आप अनिवार्य रूप से डिस्क पर एक समय में एक स्ट्रिंग लिखने वाले सरणी पर फिर से चल रहे होंगे, कुछ प्रकार के उचित विभाजक और त्रुटि-जांच तर्क के साथ।

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 :: स्ट्रिंग और यहां तक ​​कि (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; 
    } 
संबंधित मुद्दे