如何自定义cin来阅读我们自己的格式

时间:2015-07-17 13:17:34

标签: c++

考虑一个例子,你有朋友A B和C,他们去旅行,每个人花费他们的金额,最后你需要在他们之间平均分配金额 输入格式: A,B,C 100饮料 B 200零食 300 TICKETS

问题是如何读取第一行A,B,C,然后读取其余行

1 个答案:

答案 0 :(得分:2)

您创建一个类来保存信息:

struct MyClass
{
   enum friend_t {
     A, B, C
   } friend;

   std::map<friend_t, unsigned int> drink_count;
   std::map<friend_t, unsigned int> snack_count;
   std::map<friend_t, unsigned int> ticket_count;
};

然后定义一个可以单独使用的运算符来提取此信息:

std::istream& operator>>(std::istream& is, MyClass& obj)
{
    // Here put a collection of `is >> ...` operations to do what you need
}

现在,从调用范围开始,操作被封装,例如:

int main()
{
    MyClass obj;
    while (std::cin >> obj) {}
}

我会留给你找出operator>>函数的实际内容。这计算为输入解析到一定程度,但您的输入数据看起来很简单,可以使用简单循环和>>上的is次调用。