在 C++ 中将 24 小时时间转换为整数值 [关闭]
Posted
技术标签:
【中文标题】在 C++ 中将 24 小时时间转换为整数值 [关闭]【英文标题】:Converting 24 hour time to an integer value in C++ [closed] 【发布时间】:2014-05-06 16:34:38 【问题描述】:我正在学校做一个项目,我们的任务是这样的。
有一个包含以下信息的输入文本文件
08:30 Jane 10:15
08:35 Eric 11:20
08:45 Austin 11:45
09:20 Mclaren 12:50
这是在某公司工作的四名员工的入职时间、姓名和离职时间。
我应该做的是找到在里面停留时间最长的人并显示他们的名字。
(所有3个信息都是字符串类型。)
为此,我必须从一个人的离开时间中减去进入时间,将其变成一个整数值,对所有其他人执行此操作,然后比较所有这些整数并找出哪个是最大的。
问题是我不知道如何将(例如)08:45 转换为整数。我知道 C++ 可以按字典顺序比较两者,并且能够判断 10:15 大于 9:45 但不幸的是它不能减去它们。有没有一种方法可以在 C++ 中做到这一点?
或者我是否必须做一些复杂的事情并制作某种分隔符(“:”),然后取字符串的第一部分,如 08,并将其作为小时,乘以 60(在 08 之后以某种方式转换为int 8)以获得分钟,然后取分隔符后的值并将其添加到该值(在分钟转换为int之后),以获得总分钟数?对我来说听起来很复杂,我在 C++ 方面的知识也很有限,但我猜这种做事方式需要一个巨大的开关表,它将“08”转换为整数 8,依此类推,从 00 一直到60(60 例)。
一定有更简单的方法。任何帮助将不胜感激。
编辑:澄清一下,我已经知道如何从文本文件中分离出时间并将它们放入单独的字符串中。我需要有关转换本身的帮助。如何将该字符串格式的时间转换为可用的整数值。
EDIT2:使用子字符串和 atoi 解决。感谢您的帮助。
【问题讨论】:
我会尝试将这两个值转换为分钟,减去并将结果再次转换回(完整)小时。 你的分隔符方法不需要一个巨大的开关表,它不应该很复杂......但是他们在学校教你什么关于 c++(特别是转换的东西)? 你能发布你的代码吗?你几乎肯定会让问题变得比它需要的更难。 【参考方案1】:如果您知道输入字符串将始终采用该格式,您可以只取每个字符串的前五个字符和后五个字符来隔离两次。
(Hint use the substring function)
现在您将两个时间作为单独的字符串,您可以从中解析出整数值。
(Hint use sscanf)
这将为您留下两个小时值和两个分钟值。 我相信你可以算出数学来看看谁逗留的时间更长。
【讨论】:
我已经通过对每一行使用 istringstream 来关闭隔离部分(尽管也可以使用子字符串),它采用第一个完整的字符串并将其放入入口时间变量并采用下一个字符串它找到并将其放入名称变量中,然后将找到的最后一个字符串放入退出时间变量中。所以隔离已经完成(并且正在工作)。【参考方案2】:library
<string>
有很多有用的工具可以帮助解决这个问题:http://www.cplusplus.com/reference/string
获得时间本身并不算太糟糕。获得第一次,你可以做一些事情:
string line;
if(infile.is_open())
while(getline(infile, line))
line.resize(5);
// Be careful though, this'll discard the remaining information
// Use the built-in string iterator to
// traverse the string and manage the data
只需适应它,然后第二次获得第二次,最后获得第一次。不过可能有更有效的方法。
【讨论】:
【参考方案3】:除了其他答案之外,您的标题还说您要将时间格式转换为整数。
许多库使用最小的时间单位并将所有其他时间单位转换为该单位。
例如,我们以秒为基准。 设 D 为天数。 设 H 为小时数。 设 M 为分钟数。 令 S 为秒数。
积分值,以秒为单位 = (D * 24 小时/天) * (60 分钟/小时) * (60 分钟/秒) + H * 3600 + 米 * 60 + S
另一个流行的时间单位是毫秒。
【讨论】:
以上是关于在 C++ 中将 24 小时时间转换为整数值 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 sparklyr 中将 12 小时制转换为 24 小时制
如何在 j2me 中将 12 小时时间转换为 24 小时时间?