如何在C ++中完成?
示例:
time1 = 04:45;
time2 = 02:25;
result = time1 + time2;
result = 07:10
在哪个日期类型(字符串,双精度等)应保存时间值?
编辑:
是否可以从此代码中获取int h = 23
和int m = 14
?换句话说,如何打印%H和%M?
int main()
{
std::tm t = {};
std::istringstream ss("23:12");
ss >> std::get_time(&t, "%H:%M");
if (ss.fail()) {
std::cout << "Parse failed\n";
} else {
std::cout << std::put_time(&t, "%R") << '\n';
}
}
答案 0 :(得分:2)
查看<chrono>
标准C ++ 11标头。另请参阅this question。
您可以将"04:25"
字符串(阅读更多关于std::string,其中包含相当丰富的API)转换为一段时间(实际上是time_point
或{{1 }或者clock
)并在那个时间工作。
在POSIX系统(尤其是Linux)上,您可能会使用(即使使用旧的C ++或纯C语言)与时间相关的函数(阅读time(7) ...),例如strftime(3)和{{ 3}}(另见strptime(3)&amp; localtime(3) ...)
或者,您可能只是简单地计算分钟,并且duration
应该timelocal(3)为"04:45"
的洞察力(十进制,使用parsed进行转换,甚至是{ {3}} C或其std::stoi)04
和* 60 + 45
的函数是"07:10"
,即430;要进行逆向转换,请考虑7*60 +10
(给出7)和430/60
给出10。
不要忘记启用所有警告&amp;编译时调试信息(例如,如果使用strtol编译,则使用430%60
进行编译)并使用调试器(例如g++ -Wall -Wextra -g
)来了解程序的行为(例如,通过逐步运行它)步骤和查询其状态。)
你的问题非常基础(并且表明在初级编程和数学方面存在一些困难,与C ++无关)。我强烈建议您花一些时间阅读一些基本的数学教科书(高中水平,解释sscanf和GCC和quotient),然后modulus(对编程的精彩介绍,不使用C ++),然后是bases & radixes。不要忘记阅读一些关于C ++的SICP。
答案 1 :(得分:0)
(代表OP发布解决方案)。
我的工作 - 它有效! (灵感来自snps的链接和朋友的帮助)链接
int convert_time_to_minutes(string sss)
{
istringstream ss(sss);
string hh,mm;
getline(ss, hh,':');
getline(ss, mm,';');
double h,m; //hours, minutes
h = atoi(hh.c_str());
m = atoi(mm.c_str());
double minutes = (h *60 + m)/60;
cout << minutes;
return minutes;
}
两次使用此功能两次,而不是添加两个返回值,结果只需几分钟。