如何从字符串中删除:获取其他元素?

时间:2013-10-21 14:07:23

标签: c++ string

所以,我必须制作以下程序:

我输入两个“时钟”,格式为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之间有一个“:”,因此我不能简单地得到数字,所以我需要帮助如何获得小时和分钟并转换它们(转换应该是我猜是否容易)或者是否有其他更好的方法?

3 个答案:

答案 0 :(得分:2)

  1. 您应该阅读NUMBERS,而不是字符串。读数字直到非数字,因此将停在:

    char dummy;
    int hour, minute;
    cin >> hour >> dummy >> minute;
    // check dummy == ':'
    
  2. 读取字符串直到空格。除非您设置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
}