2012-01-20 5 views
6

Я строю очень простой вопрос. Я хочу создать динамически массив строк в C++.создание динамического массива строки C++

Как я могу это сделать?

Это моя попытка:

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

Но это дает следующее сообщение об ошибке

error C2109: subscript requires array or pointer type 

Что ошибка?

А также, если я получу номер ввода от пользователя, от std::cin могу ли я создать массив такого размера статически?

+1

В будущем, пожалуйста, выберите блок кода и использовать '{}' кнопка; это заставит ваш код правильно отображаться в вопросе. –

+1

Вы набрали 'wordsCollection [i]' вместо 'collection [i]'. Вы не можете использовать полученный размер * динамически * (например, через 'std :: cin') для создания статического массива. Кроме того, массив протекает, поскольку вы никогда его не выпускаете. –

ответ

9

Вы имели в виде ввести:

std::cin>>collection[i]; 

И вы также должны delete[]collection (или вы просачиваться этой память).

Было бы лучше использовать std::vector<std::string> collection; и избежать необработанного использование указателя в целом:

#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

использование std::vector<string> или std::list<string> над рукой прокатки его.

+2

Но настоящая проблема заключается в том, что 'wordsCollection' должен быть' collection'. – cnicutar

+0

О, боже мой, как я глупый ... Любые, как спасибо ... Можете ли вы сказать мне ответ на мой второй вопрос, который я могу создать статический массив этого –

+1

Я согласен, но если вы решите пойти с новым std :: string' не забудьте «удалить [] коллекцию, когда закончите. Это хорошая идея, чтобы гарантировать, что для каждого 'нового' у вас есть' delete' –

0

Я думаю, что это простая опечатка. std::cin>>wordsCollection[i] должно быть std::cin>>collection[i].

0

Вы получаете эту ошибку, потому что вы пытаетесь доступа элементы в междунар (т.е. wordsCollection), а не массив Int (т.е. collection). То, что вы должны писать в

std::cin>>collection[i] 
0

Попробуйте следующее:

#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; 
} 
Смежные вопросы