2012-01-20 28 views
6

Estoy estructurado a una pregunta muy básica. Quiero crear dinámicamente una matriz de cadenas en C++.creando una matriz dinámica de la cadena C++

¿Cómo puedo hacer eso?

Este es mi intento:

#include <iostream> 
#include <string> 
int main(){ 
    unsigned int wordsCollection = 6; 
    unsigned int length = 6; 

    std::string *collection = new std::string[wordsCollection]; 
    for(unsigned int i = 0; i < wordsCollection; ++i){ 
     std::cin>>wordsCollection[i]; 
    } 
    return 0;  
} 

Pero dando el siguiente error

error C2109: subscript requires array or pointer type 

¿Cuál es el error?

Y además, si recibo el número de entrada del usuario, ¿puedo crear una matriz de ese tamaño estáticamente desde std::cin?

+1

En el futuro, por favor seleccione su bloque de código y utilizar el '{}' botón; esto hará que su código se muestre correctamente en la pregunta. –

+1

Ha escrito 'wordsCollection [i]' en lugar de 'collection [i]'. No puede usar un tamaño obtenido * dinámicamente * (por ejemplo, a través de 'std :: cin') para crear una matriz estática. Además, la matriz se está filtrando ya que nunca la sueltas. –

Respuesta

9

que significaba para escribir:

std::cin>>collection[i]; 

Y también tiene que delete[]collection (o tendrá fugas esta memoria).

Sería mejor uso std::vector<std::string> collection; y evitar el uso del puntero prima por completo:

#include <iterator> 
#include <iostream> 
#include <string> 
#include <vector> 

int main() 
{ 
    const unsigned int wordsCollection = 6; 

    std::vector<std::string> collection; 
    std::string word; 
    for (unsigned int i = 0; i < wordsCollection; ++i) 
    { 
     std::cin >> word; 
     collection.push_back(word); 
    } 

    std::copy(collection.begin(), 
       collection.end(), 
       std::ostream_iterator<std::string>(std::cout, "\n")); 
} 
10

usa std::vector<string> o std::list<string> sobre la mano haciéndolo rodar.

+2

Pero el problema real es que 'wordsCollection' debería ser' collection'. – cnicutar

+0

Oh, Dios mío, qué tonto soy ... De todos modos, gracias ... ¿puedes decirme la respuesta a mi segunda pregunta? ¿Puedo crear una matriz estática de ese –

+1

? Estoy de acuerdo, pero si decides seguir adelante con 'nuevo std :: string' no se olvide de 'borrar [] colección' cuando haya terminado. Es una buena idea asegurarse de que por cada 'nuevo' tenga 'delete' –

0

Creo que es un error tipográfico. std::cin>>wordsCollection[i] debe ser std::cin>>collection[i].

1

creo que debería ser:

std::cin >> collection[i]; 
0

Usted está recibiendo este error porque estás tratando de acceder a los elementos de un int (es decir wordsCollection), no una matriz de int (es decir collection). Lo que se debe escribir es

std::cin>>collection[i] 
0

Pruebe lo siguiente:

#include <vector> 
#include <string> 
#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    std::vector<std::string> myStrings; 
    myStrings.push_back(std::string("string1")); 
    myStrings.push_back(std::string("string2")); 

    std::vector<std::string>::iterator iter = myStrings.begin(); 
    std::vector<std::string>::iterator end = myStrings.end(); 
    while(iter != end) 
    { 
     std::cout << (*iter) << std::endl; 
     ++iter; 
    } 
    return 0; 
} 
Cuestiones relacionadas