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

How to remove : from string and get other elements?

本文关键字:获取 其他 元素 删除 字符串      更新时间:2023-10-16

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

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

  1. 你应该读的是数字,而不是字符串。数字被读取直到非数字,因此将在:停止:

    char dummy;
    int hour, minute;
    cin >> hour >> dummy >> minute;
    // check dummy == ':'
    
  2. 字符串被读取到空格。除非您设置了跳过,否则不会跳过空格。但是,有一个函数允许读取字符串直到特定的分隔符:

    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.
    

使用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;
}

然后,您可以轻松比较两个时间戳,并告诉它们相隔多少分钟。

像这样:

int h,m;
char separator;
cin >> h >> separator >> m;
if(separator == ':' && h>=0 && h < 24 && m >=0 && m < 60)
{
  // you have a correct hour
}