如何访问C ++中的某些元素(向量中)

时间:2014-01-20 05:20:39

标签: 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]
由于空间的原因,它会被抛弃。

1 个答案:

答案 0 :(得分: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