从行读取hh:mm格式的时间

时间:2014-05-08 18:31:18

标签: c++ input

我有一个由以下行组成的文件:

nameOfFood hh:mm PriceOfFood.

我必须计算每种食物在11:30到13:30之间提供的收入。 所以输出应该如下所示:

nameOfFood1 yielded $$$ between 11:30 and 13:30.  
nameOfFood2 yielded $$$ between 11:30 and 13:30. 

等等。

目前我使用ifstream f来执行此操作(名称和时间是字符串,价格是整数):

f >> name >> time >>price;

我的问题是:如何将时间戳的HH和MM部分读入单独的(integer)变量中,这样我可以将它们转换为分钟(60 * HH + MM)以使它们具有可比性?< / p>

3 个答案:

答案 0 :(得分:4)

输入操作符的工作方式是它停止在流中不再与目标匹配的点(除了分隔符,如空格)。因此,只需将小时和分钟视为输入流中的整数,但您还必须吞下冒号字符。

std::istringstream f("name 19:30 234");
std::string name;
int hour;
int minute;
int price;
char c;

f >> name >> hour >> c >> minute >> price;

答案 1 :(得分:1)

由于您的输入格式已修复,您可以这样做:

std::string time = ...;
std::string hours(time, 0, 2); // start at 0, take 2 chars
std::string minutes(time, 3, 2); // start beyond ':', take 2 chars

这会使std::string的{​​{3}}使用另一个字符串,位置和字符数。

我会将实际的整数转换作为练习。

答案 2 :(得分:0)

只需使用c输入法:

scanf("%d:%d",&H,&M);

不要忘记包含stdio.h