Создать диапазон чисел в C++
мне нужна помощь в определении диапазона чисел. У меня ошибка в коде и результат выглядит так:
Input: rangeStart = 1, rangeEnd = 23, periodLength = 10
Output: 1 2 3 4 5 6 7 8 9 10 11-20 21 22 23
Мне нужно, чтобы это было:
Input: rangeStart = 1, rangeEnd = 23, periodLength = 10
Output: 1-10 11-20 21 22 23
std::stringstream OptimizeDate(int rangeStart, int rangeEnd, std::string periodType, int periodLength){
std::stringstream res;
if (periodType == "whole"){
for (int i = rangeStart; i <= rangeEnd; i++){
double tmp = i % periodLength;
if (tmp == 0) {
res << i << std::endl;
res << std::to_string(i + 1) + "-" + std::to_string(i + periodLength) << std::endl;
i = i + periodLength;
} else {
res << i << std::endl;
}
}
}
return res;
}
Буду признателен за любой ответ
Ответы (2 шт):
Чисто исходя из ваших примеров ввода вывода:
for (int i = rangeStart; i <= rangeEnd; i++){
int tmp = i % periodLength ;
int next = i + periodLength - 1;
if (tmp == 1 && next <= rangeEnd) {
res << std::to_string(i + 1) + "-" + std::to_string(i + periodLength) << std::endl;
i = i + periodLength - 1;
} else {
res << i << std::endl;
}
}
В вашем коде вы на первой итерации получаете 1 и выписываете весь период, а после периода вы прибавляете слишком много и снова выписываете полный период. Это более заметно если rangeEnd взять большой.
И, возможно, вам будет лучше использовать enum для periodType.
Лишние вызовы функций, создание объектов и арифметические действия, тормозят программу.Часто лучше просто генерировать числа с заданным шагом и стартовым значением, пока не достигли конца. Представлю вариант:
std::stringstream out;
int rangeStart = 1, rangeEnd = 23, periodLength = 10;
int k = rangeEnd / periodLength;
while (k--) {
out << rangeStart << '-'
<< rangeStart + periodLength - 1 << ' ';
rangeStart += periodLength;
}
while (rangeStart <= rangeEnd)
out << rangeStart++ << ' ';