创建字符串c ++的动态数组

时间:2012-01-20 22:24:50

标签: c++ arrays dynamic

我是一个非常基本的问题。我想在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 个答案:

答案 0 :(得分:10)

使用std::vector<string>std::list<string>覆盖它。

答案 1 :(得分: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"));
}

答案 2 :(得分:1)

我认为应该是:

std::cin >> collection[i];

答案 3 :(得分:0)

我认为这是一个简单的错字。 std::cin>>wordsCollection[i]应为std::cin>>collection[i]

答案 4 :(得分:0)

您收到此错误是因为您正在尝试访问int的元素(即wordsCollection),而不是int的数组(即collection)。你应该写的是

std::cin>>collection[i]

答案 5 :(得分: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;
}
相关问题