初始化一个二维数组的字符串

问题描述:

如何在C++中声明一个二维数组的字符串?还有如何在文件上写这个字符串?初始化一个二维数组的字符串

+2

什么样的琴弦?字符串文字? C字符串? `std :: string`对象? `CString`对象? `QString`对象?某种类型的Unicode字符串?加密的字符串?一些其他类型的字符串?你需要将它们写入什么类型的文件?他们需要在文件中以特定的方式进行编码吗?你有[一本好的入门C++书](http://*.com/questions/388242/the-definitive-c++-book-guide-and-list)?如果是这样,你有咨询吗?如果不是,你应该得到一个。 – 2011-01-06 06:25:54

你可以声明字符串的多维数组是这样的:

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()`。 – 2011-01-06 06:47:01

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; 

宣言和初始化在一起:

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

对于写入文件,templatetypedef的答案几乎是正常,但你应该做的错误检查并在完成后关闭输出文件流。

我假设你有QString类型。这应该适用于std :: string和even(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!"; 

#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; 
    }