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

How to access certain elements in C++ (in vector)

本文关键字:元素 何访问 访问 向量      更新时间:2023-10-16

我是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