2014-01-20 49 views
0

比方說,用戶輸入存儲多個輸入到一個數組

Sarah Freshman Computer Science Major 
John Sophomore Math Major 

我想知道我怎麼能夠將這些多個輸入存儲到一個列表?

Name = [Sarah, John] 
Year = [Freshman, Sophomore] 
Major = [Computer Science Major, Math Major] 

我能夠存儲前兩個(薩拉/大一&約翰/大二)到一個列表,但由於主要分爲空間的後半部分是很難的。

- 編輯:示例代碼 -

我新的C++,我試圖創建一個程序,要求用戶的個人問題。

std::vector<std::string> name, year, major; 
std::cout << "Hello, what is your Name Year Major? "; //asks user first 
std::cin << name; 
std::cin << age; 
std::cin << major; 

int n; 
std::cout << "How many students will you input? "; //enter other students info 
std::cin << n; 

for (int a=0;a<n;a++){ 
    std::cout << "Please enter Name Age Major for student #" << a << ": "; 
    std::string a, b, c; 
    std::cin >> a; 
    std::cin >> b; 
    std::cin >> c; //this part throws me off 
    name.push_back(a); 
    age.push_back(b); 
    major.push_back(c); 

} 
+0

爲什麼你在第一時間需要什麼專業?只需拍攝主題,如果您確實需要它,稍後在顯示時追加它。 – SoulRayder

+0

你可以忽略「主要」一詞。我只是想添加一個額外的單詞來強調如果我有多個單詞,它將不會被存儲。 – Kara

+0

一個簡單的方法來做到這將是一個Computer_Science_Major的輸入,而不是用空格,再後來改變_對空間 – Ranveer

回答

1

因爲其他人提到如何通過改變你輸入要做到這一點,這是一種你可以做到這一點不改變你的輸入檢查,如果你正在閱讀的單詞是一個重大的(IE「計算機」的第一個字「數學「等),並使用getline到行尾,如果你看到它是。如果你的輸入和這個完全一樣,檢查一個單詞是否是班級年的一個可能會更好,因爲你不需要做任何附加操作,並且要檢查的單詞列表要小得多。

或者,如果你知道的形式始終是「名」,「類年」,「大」,你可以簡單地將第二個字讀之後開始函數getline。

0

建議1:

使用getline()和每一個字後插入特殊字符,並告訴你的程序只有在遇到特殊字符來標記輸入作爲下一個輸入。在你的情況下更容易 - 只要程序遇到單詞「Major」,就會進入下一個輸入。

建議2:

輸入爲Computer_Science_Major後來改變_空間在你的程序。

0

使用讀取與當時的解析策略:

vector<string> name; 
vector<string> year; 
vector<string> major; 

string line; 
while(getline(cin, line)) // 1. reading... 
{ 
    if (line == "0") // enter 0 to finish input 
     break; 

    // 2. parsing... 
    int first = line.find(" "); // position of the first space 
    int second = line.find(" ", first+1); // position of the second space 

    name.push_back(line.substr(0, first)); 
    year.push_back(line.substr(first+1, second-first-1)); 
    major.push_back(line.substr(second+1)); 
} 
相關問題