我有一个作业-我必须在广播时间创建脚本。广播是指时间在例如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,那么一切正常。.
答案 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 +进行格式化。