我有一个由以下行组成的文件:
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>
答案 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