gpt4 book ai didi

c++ - cin 用于未知数量的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:05 26 4
gpt4 key购买 nike

对于一个项目,我必须制作一个队列,其中包含人员姓名、他们想要的服务数量以及他们想要的每项服务的列表。可以多次请求相同的服务。

基本上它的输入看起来像这样。

Dave 3 spa sauna pedicure
sarah 4 spa spa walk sauna
jim 1 walk
.

“。”表示我所有输入的结束。不管什么时候叫walk,一旦他们walk了他们就不想再做任何事就走了。所以在莎拉的例子中,她去了两次水疗中心,然后就走了。她没有去她的桑拿浴室。

我的问题是我不知道如何实际获取信息。我假设我有一个表示人的类,但我不知道如何制作它以便他们可以放置随机数量的人。如果只有 3 个人,我会使用 for 循环并将每个人保存到数组中的不同位置。

有什么方法可以简单地做到这一点吗?

最佳答案

终端用户输入有特殊符号,因此您可以要求输入,直到获得此符号 (".")。代码可以是这样的:

while(true)
{
std::string name;
std::cin >> name;

if(name == ".")
break;

// number of services
size_t n = 0;
std::cin >> n;

// list of services
std::vector<std::string> services(n);
for(size_t i = 0; i < n; ++i)
std::cin >> services[i];

// Here you can process user
// You know user's name and have std::vector of his services
}

此代码无限循环,直到用户名等于“.”。

如果您要输出所有用户或在列表中处理它们,您必须将它们存储在 vector 中。

struct User
{
User(const std::string& _name):
name(_name)
{
}

std::string name;
std::vector<std::string> services;
};

std::vector<User> users;

int main( )
{
std::vector<User> users;

while(true)
{
std::string name;
std::cin >> name;
if(name == ".")
break;

users.push_back(User(name));

size_t n = 0;
std::cin >> n;

for(size_t i = 0; i < n; ++i)
{
std::string serviceName;
std::cin >> serviceName;

users.back().services.push_back(serviceName);
}
}

for(size_t n = users.size(), i = 0; i < n; ++i)
{
std::cout << users[i].name;
std::cout << " ";
std::cout << users[i].services.size();
std::cout << " ";
for(size_t s = users[i].services.size(), j = 0; j < s; ++j)
std::cout << users[i].services[j] << " ";
std::cout << std::endl;
}

return 0;
}

此代码读取用户及其服务,然后将它们打印回来。

如果您知道每个用户都在不同的行上,则可以通过另一种方式读取每个用户。

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

std::istringstream ss(l);

std::string name;
ss >> name;
if(name == ".")
break;

users.push_back(User(name));

size_t n = 0;
ss >> n;

for(size_t i = 0; i < n; ++i)
{
std::string serviceName;
ss >> serviceName;

users.back().services.push_back(serviceName);
}

我正在从输入流 (cin) 中读取整行,然后创建字符串流 (ss) 并从中读取用户信息。

关于c++ - cin 用于未知数量的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12906606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com