簡體   English   中英

如何在C ++中訪問某些元素(矢量)

[英]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);

現在,您需要解析字符串。 也就是說,您需要單獨查看字符,然后根據它們的值將字符串分解為較小的部分,並將它們存儲在需要的位置。 解析是一個復雜的主題,並且其實現因情況而異。 標准庫提供了一些基本的解析功能,如果您同意以下限制,則可以使用標准庫功能輕松完成此操作:

  • 名字是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM