2012-01-20 50 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

我同意,但是如果你選擇繼續'new std :: string'不要忘記在完成時刪除[]集合。確保每個'new'都有一個'delete'是一個好主意。 –

0

我認爲這是一個簡單的錯字。 std::cin>>wordsCollection[i]應該是std::cin>>collection[i]

1

我認爲應該是:

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

因爲你想訪問你收到此錯誤int的元素(即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; 
}