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

Reading time in hh:mm format from a line

本文关键字:mm 格式 时间 hh 读取 一行      更新时间:2023-10-16

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

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)以使它们具有可比性?

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

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

由于您的输入格式是固定的,您可以这样做:

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的构造函数接受另一个字符串、位置和字符计数。

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

您可以简单地使用c输入法:

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

不要忘记包含stdio.h