создание динамического массива строки c ++ - PullRequest
6 голосов
/ 21 января 2012

Я согласен с очень простым вопросом. Я хочу динамически создать массив строк в 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 могу ли я создать массив такого размера статически?

Ответы [ 6 ]

10 голосов
/ 21 января 2012

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

9 голосов
/ 21 января 2012

Вы хотели напечатать:

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"));
}
1 голос
/ 21 января 2012

Я думаю, что должно быть:

std::cin >> collection[i];
0 голосов
/ 21 января 2012

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

#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;
}
0 голосов
/ 21 января 2012

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

std::cin>>collection[i]
0 голосов
/ 21 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...