c++ - 如何删除 : from string and get other elements?

标签 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 之间有一个“:”,因此我不能简单地得到数字,所以我需要帮助如何得到小时和分钟并转换它们(转换应该是我猜很简单),或者是否有更好的替代方法?

最佳答案

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

    处停止
    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.
    

关于c++ - 如何删除 : from string and get other elements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496778/

相关文章:

c++ - 为什么我只需要在我将开发使用 ffmpeg 库的应用程序的 PC 上直接编译 ffmpeg?

c++ - 如何处理非法地址删除

c++ - 删除成员函数中对容器的引用

string - 在 String Haskell 中的每个标点符号后插入空格

javascript - 将数组名称作为字符串传递,jquery

c++ - 如何让std::hash_set<pair<T1, T2>>编译运行

c++ - 为什么这种方法会给出两个不同的结果?

java - StringBuffer 的 insert() 和 deleteCharAt() 方法是如何工作的

java - 哈希表不接受字符串作为键

javascript - 将字符串中的相同字符替换为数组,但每次出现时都使用下一个条目