2011-01-06 53 views
8

¿Cómo declarar una matriz bidimensional de cadenas en C++? y también cómo escribir esta cadena en los archivos?inicialización de una matriz bidimensional de cadenas

+2

¿Qué tipo de cuerdas? ¿Literales de cadena? C cadenas? 'std :: string' objetos? '¿Objetos de CString'? Objetos 'QString'? Cadenas Unicode de algún tipo? Cadenas cifradas? ¿Algún otro tipo de cuerdas? ¿En qué tipo de archivo necesitas escribirlos? ¿Deben codificarse de una manera particular en el archivo? ¿Tiene [un buen libro introductorio de C++] (http://stackoverflow.com/questions/388242/the-definitive-c++book-guide-and-list)? Si es así, ¿lo has consultado? Si no, deberías obtener uno. –

Respuesta

2

Se puede declarar una matriz multidimensional de cadenas como esto:

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

Por supuesto, sustituyendo sus propios valores de anchura/altura de 137 y 42. :-)

No hay "una forma correcta "para escribir esta matriz en el disco. Básicamente iterará sobre la matriz escribiendo una cadena a la vez en el disco, con algún tipo de separadores apropiados y lógica de comprobación de errores. He aquí una aplicación ingenua, que escribe a cabo una cuerda por línea (suponiendo que las cadenas no tienen ningún saltos de línea en ellos):

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; 

Espero que esto ayude! Declaración

+0

do 'output.close()' al final. –

+2

No es necesario; cuando el objeto de flujo sale del alcance, el destructor cerrará el archivo. – 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

e inicialización juntos:

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

Para escribir en el archivo, la respuesta de templatetypedef es casi bien, excepto que debe hacer la comprobación de errores y cerrar el flujo de archivo de salida cuando haya terminado.

0

Supongo que tiene el tipo QString. Esto debería funcionar para std :: string e incluso (char *) correctamente.

QString ** myTwoDimensionalArray; 

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

Eso es todo. Ahora, usted puede escribir algo como:

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; 
    } 
Cuestiones relacionadas