2014-01-20 57 views
0

我是C++新手,正在嘗試創建一個程序來詢問用戶的個人問題。如何訪問C++中的某些元素(向量中)

std::vector<std::string> name, age, favsinger; 
std::cout << "Hello, what is your Name Age Favorite_Singer? "; 
std::cin << name; 
std::cin << age; 
std::cin << favsinger; 

int n; 
std::cout << "How many siblings do you have? "; 
std::cin << n; 

for (int a=0;a<n;a++){ 
    std::cout << "Please enter Name Age Favorite_Singer for sibling #" << a << ": "; 
    std::string a, b, c; 
    std::cin >> a; 
    std::cin >> b; 
    std::cin >> c; //this part throws me off because favorite singer has a first_name SPACE last_name 
    name.push_back(a); 
    age.push_back(b); 
    favsinger.push_back(c); 

} 

比方說,用戶輸入「3」兄弟姐妹的信息:

Michael 24 Madonna 
Sam 20 Michael Jackson 
Anna 18 None 

我希望能夠訪問每個兄弟姐妹的喜好,無論是他們的姓名,年齡,或最喜歡的歌手。

我試着做

age[1] 

,但如果我這樣做

favsinger[1] 

它被拋出,因爲空間的關閉。

+2

您可能想使用'std :: getline'來獲取一行輸入,併爲您自己解釋該行。 – WiSaGaN

+0

但是,如果我使用std :: getline,我不知道如何訪問favorite_singer並考慮到使用的空白空間。 – Kara

+0

你訪問元素的方式很好[age.at(index)更好]。元素沒有插入到矢量[檢查長度]。如果你發佈完整的代碼,那會更好 – Dineshkumar

回答

0

首先,你應該使用函數getline,讓整個輸入線作爲字符串:

std::string input_line; 
std::getline(std::cin, input_line); 

現在你需要解析的字符串。也就是說,您需要分別查看字符,並根據它們的值將字符串拆分爲更小的組件,並將它們存儲在需要去的地方。解析是一個複雜的主題,它的實現因個案而異。標準庫提供了一些基本的分析功能,如果你能同意以下的限制,您可以使用標準庫功能做到這一點很容易:

  • 名1個字
  • 年齡是1個字
  • 最喜歡的歌手是無論是留在考慮到這些限制線

,我們正是如此解析input_line

std::istringstream iss(input_line); 
std::string name, age, favsinger; 
iss >> name >> age; 
std::getline(iss, favsinger); 

如果您不熟悉istringstream,它位於<sstream>標題中。 http://en.cppreference.com/w/cpp/io/basic_istringstream

+0

我嘗試了input_line >> name >> age,但是由於某種原因它給了我錯誤「無效的操作數到二進制表達式」? – Kara

+0

@Lalala:哎呀。那應該是'iss >> name >>年齡;' - 固定的。 –