家庭作业radioamateur-HH:MM时间格式存在问题

时间:2019-01-20 14:45:48

标签: c++ time

我有一个作业-我必须在广播时间创建脚本。广播是指时间在例如12:21或02:20时-从后面到开始都是一样的。 我希望那段时间以HH:MM格式写入。 一切正常,但最多只能做一件事。 如果时间<10,则不是HH:MM格式,而是H:MM格式示例-04:40输出为4:40-这是一个问题。

#include <iostream>
#include <string>
#include <queue>
#include <tuple>
#include <limits>

int main() {
std::cout << "Give me a number: " << std::endl;
int c;
std::cin >> c;

if (c < 1) {
    std::cout << "Incorrect!." << std::endl;

    main();
}
else if (c > 2000) {
    std::cout << "Incorrect!" << std::endl;

    main();
}
else {
    std::cout << "Correct value." << std::endl;

    std::queue<std::tuple<int, int>> casy;

    for (int i = 0; i < c; i++) {
        std::cout << "Give me a time number. " << i << " (HH:MM): ";
        int hour, minute;
        char c; 
        std::cin >> hour >> c >> minute;
        std::cin.clear();
        std::cin.ignore(10000, '\n');

        /* Uložení času do fronty [std::queue] */
        casy.push(std::make_tuple(hour, minute));
    }

    for (int u = 0; u = times.size(); u++) {
        int broadcastingTimes[15][2] = { { 01, 10 },{ 02, 20 },{ 03, 30 },{ 04, 40 },{ 05, 50 },{ 10, 01 },{ 11, 11 },{ 12, 21 },{ 13, 31 },{ 14, 41 },{ 15, 51 },{ 20, 02 },{ 21, 12 },{ 22, 22 },{ 23, 32 } };
        int actuallyBroadcastingIndex = 0;

        for (int o = 0; o < 15; o++) {

            if (std::get<0>(times.front()) == broadcastingTimes[o][0]) {
                if (std::get<1>(times.front()) <= broadcastingTimes[o][1]) {

                    /*if(o != 0) {
                    if(std::get<0>(times.front()) > broadcastingTimes[o-1][0]) {
                    if(std::get<0>(times.front()) > broadcastingTimes[o-1][1]) {
                    actuallyBroadcastingIndex = o;
                    } else {
                    actuallyBroadcastingIndex = o-1;
                    }
                    } else {
                    actuallyBroadcastingIndex = o;
                    }
                    } else {
                    actuallyBroadcastingIndex = o;
                    }*/


                    actuallyBroadcastingIndex = o;
                }
                else {
                    actuallyBroadcastingIndex = o + 1;
                }

                if (std::get<0>(times.front()) == 23) {
                    if (std::get<1>(times.front()) > 32) {
                        actuallyBroadcastingIndex = 0;
                    }
                }
            }
            else if (std::get<0>(times.front()) > broadcastingTimes[o][0] & std::get<0>(times.front()) < broadcastingTimes[o + 1][0]) {
                //std::cout << std::get<0>(casy.front()) << "/" << broadcastingTimes[o][0] << "\n";

                actuallyBroadcastingIndex = o + 1;
            }

        }

        int hourInput = std::get<0>(times.front());
        std::string timeInputedByUser = std::to_string(hourInput) + ":" + std::to_string(std::get<1>(times.front()));
        std::string broadcastingTimeActually = std::to_string(broadcastingTimes[actuallyBroadcastingIndex][0]) + ":" + std::to_string(broadcastingTimes[actuallyBroadcastingIndex][1]);

        //std::cout << "sss" <<  broadcastingTimes[actuallyBroadcastingIndex][0] << "\n";
        std::cout << "Nearest broadcasting from " << timeInputedByUser << " will be at " << broadcastingTimeActually << std::endl;

        casy.pop();
        std::cin.get();
    }

}

return 0;
}

预期结果是:如果最近的广播时间将为04:40-它将输出为04:40-而不是现在的4:40。如果最近的广播时间是14:41,那么一切正常。.

1 个答案:

答案 0 :(得分:0)

使用stringstream可以设置数字后面的字符串的宽度,并设置填充字符:

std::stringstream ss;
ss.fill('0');

ss << std::setw(2) << hourInput << ":";
ss << std::setw(2) << std::get<1>(casy.front());

std::string timeInputedByUser = ss.str();

ss.str(std::string()); // clear the buffer
ss << std::setw(2) << broadcastingTimes[actuallyBroadcastingIndex][0] << ":";
ss << std::setw(2) << broadcastingTimes[actuallyBroadcastingIndex][1];

std::string broadcastingTimeActually = ss.str();

std::cout << "Nearest broadcasting from " << timeInputedByUser << " will be at " << broadcastingTimeActually << std::endl;

顺便说一句,您可以使用stringsteam而不是string opearator +进行格式化。