Решаю я тут задачки и наткнулся на эту https://acmp.ru/index.asp?main=task&id_task=331 Вот уже второй день голову себе долблю не могу понять как сделать чтобы оно считывало ":" или чтобы всё что дальше ":" читала
Делал сам, как я понял у тебя проблема была с 11 тестом?))) #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> arr; string str = ""; int addTimeF = 0; int addTimeS = 0; string delim(":"); size_t prev = 0; size_t next; size_t delta = delim.length(); int maxH = 24; int maxM = 60; int outH, outM; cin >> str >> addTimeF >> addTimeS; while ((next = str.find(delim, prev)) != string::npos) { //Отладка-start string tmp = str.substr(prev, next - prev); //Отладка-end arr.push_back(str.substr(prev, next - prev)); prev = next + delta; } //Отладка-start string tmp = str.substr(prev); //Отладка-end arr.push_back(str.substr(prev)); int A = atoi(arr[0].c_str()); int B = atoi(arr[1].c_str()); outH = A + addTimeF; outM = B + addTimeS; while (outM >= maxM) { outM -= maxM; outH += 1; } while (outH >= maxH) { outH -= maxH; } if (outH < 10) { cout << 0 << outH; } else { cout << outH; } cout << ":"; if (outM < 10) { cout << 0 << outM; } else { cout << outM; } return 0; } Code #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> arr; string str = ""; int addTimeF = 0; int addTimeS = 0; string delim(":"); size_t prev = 0; size_t next; size_t delta = delim.length(); int maxH = 24; int maxM = 60; int outH, outM; cin >> str >> addTimeF >> addTimeS; while ((next = str.find(delim, prev)) != string::npos) { //Отладка-start string tmp = str.substr(prev, next - prev); //Отладка-end arr.push_back(str.substr(prev, next - prev)); prev = next + delta; } //Отладка-start string tmp = str.substr(prev); //Отладка-end arr.push_back(str.substr(prev)); int A = atoi(arr[0].c_str()); int B = atoi(arr[1].c_str()); outH = A + addTimeF; outM = B + addTimeS; while (outM >= maxM) { outM -= maxM; outH += 1; } while (outH >= maxH) { outH -= maxH; } if (outH < 10) { cout << 0 << outH; } else { cout << outH; } cout << ":"; if (outM < 10) { cout << 0 << outM; } else { cout << outM; } return 0; }
Задание по ссылке не смотрел, но в чем проблема считывать полностью и сплитить? Используешь find и substr
Зачем ломать голову. Жрем время отправление чаровым массивом. arr[0] arr[1] - часы. arr[3] arr[4] - минуты. Преобразуем к int/short и делаем банальное сложение. Выводить можно тем же чаровым массивом(для экономии памяти, загоняя в часы результат суммы часов (С проверкой на 24 часа) и в минуты результат сложения минут с проверкой на 60 минут).