[英]How to access certain elements in C++ (in vector)
我是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]
由於空間原因,它被扔掉了。
首先,您應該使用getline將整個輸入行作為字符串獲取:
std::string input_line;
std::getline(std::cin, input_line);
現在,您需要解析字符串。 也就是說,您需要單獨查看字符,然后根據它們的值將字符串分解為較小的部分,並將它們存儲在需要的位置。 解析是一個復雜的主題,並且其實現因情況而異。 標准庫提供了一些基本的解析功能,如果您同意以下限制,則可以使用標准庫功能輕松完成此操作:
鑒於這些限制,我們可以這樣解析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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.