所以,我必须制作以下程序:
我输入两个“时钟”,格式为HH:MM,我必须在几分钟内检查它们之间的差异并输出它。然后我必须检查哪个时间有更大的尺寸,以分钟为单位,并输出哪个时间更长或者它们是否相等。
所以,我做到了这一点:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
string a, b, c, d;
int a_min, b_min;
getline(cin, a, ':');
cin >> b;
getline(cin, c, ':');
cin >> d;
a_min = atoi(a.c_str()) * 60 + atoi(b.c_str());
b_min = atoi(c.c_str()) * 60 + atoi(d.c_str());
if (a_min > b_min){
cout << "Razlikata iznesuva " << a_min - b_min << " minuti" << endl;
cout << "Pogolemo e prvoto vreme" << endl;
}
else if (b_min > a_min){
cout << "Razlikata iznesuva " << b_min - a_min << " minuti" << endl;
cout << "Pogolemo e vtoroto vreme" << endl;
}
else if (a_min == b_min){
cout << "Vreminjata se isti" << endl;
}
return 0;
}
但是当你输入HH:MM时,我在HH和MM之间有一个“:”,因此我不能简单地得到数字,所以我需要帮助如何获得小时和分钟并转换它们(转换应该是我猜是否容易)或者是否有其他更好的方法?
答案 0 :(得分:2)
您应该阅读NUMBERS,而不是字符串。读数字直到非数字,因此将停在:
:
char dummy;
int hour, minute;
cin >> hour >> dummy >> minute;
// check dummy == ':'
读取字符串直到空格。除非您设置skipws,否则不会跳过空格。但是,有一个函数允许读取字符串直到特定的分隔符:
string hour, minute;
getline(cin, hour, ':'); // this will eat the `:`
cin >> minute; // assuming whitespace or eof after this
// check the values, that you didn't cross eof and such.
答案 1 :(得分:1)
使用std::istringstream
为您解析;这需要24小时格式的时间戳:
static unsigned int minutesSinceMidnight( const std::string &timeStamp )
{
unsigned int hours, minutes;
char colon;
std::istringstream( timeStamp ) >> hours >> colon >> minutes;
return hours * 60 + minutes;
}
然后,您可以轻松地比较两个时间戳,并告诉他们分开多少分钟。
答案 2 :(得分:0)
这样的事情:
int h,m;
char separator;
cin >> h >> separator >> m;
if(separator == ':' && h>=0 && h < 24 && m >=0 && m < 60)
{
// you have a correct hour
}