- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
/// Checks if the token is number or not
bool is_number(char* test_val)
{
const char* ROW = "0123456789\0";
for (int i = 0; i < strlen(test_val); i++) {
for (int j = 0; j < strlen(ROW); j++) {
if (test_val[i] == ROW[j]) {
goto next;
}
}
return false;
next:
}
return true;
}
Можно было бы по карте Карно попытаться сократить, но вряд ли что-то из этого выйдет
даже на сишке это может выглядеть лучше
мамкин хакир может while переписать на for
а борманд и 3.1415 могут поделить строку на uint64_t и въебать на ксорах, битмасках и лсд спец олимпиадное решение без сравнений
а программист должен взять std::isdigit(std::locale), потому что в японском цифры бывают вообще не те!
https://ideone.com/3tyvcw
https://wandbox.org/permlink/8pHFVfgWmKDwO05s
Поддержка плюса, шестнадцатеричных чисел и локали планируется в следующих версиях.
Правда, в этом случае он для задачи подходит так себе (отрицательные числа не обрабатывает, переполнения тоже), а уж когда понадобится проверять плавающих питухов — тупой фор превратится в адовую портянку.
ec - тоже очень говорящее поле. Почему не error_code?
Из «Буста», быть может? Там, ЕМНИП, «ec» распространено.
Чего стоят ate (at end) и showmanyc (stream how many characters).
хорошо что я больше не настоящая крестоблядь!
а также буст.лексикал-каст, который это вполне эксплойтил в дефолт шаблоне
а для больших фоннатов пирформанса был буст спирит, который реально пыщ пыщ здорово разбирал поток на токены
я и говорю - всё больше какой-то хуйни изобретают
самое главное - исходно никто не просил проверять, что значение влезет в какой-то дефолтный числовой тип
Всё новое - это хорошо забытое старое. Они же тупо старый добрый сишный strtoll в итераторы завернули, ничего нового придумать не сумели. Даже вон сишный код ошибки возвращают.
Теперь можно явно задавать тип/размер проверяемого числа. Даже плавающих питухов поддерживает!
https://wandbox.org/permlink/v38nFlIvEvyM3nNN
Это число.
Ты умеешь переводить рандомные символы?
З.Ы. А ну да, собачка на 0x40.
но '0' and '9' охуенно наглядно, бесплатно и эквивалентно каким-то хакирным кодам символов
Обижаешь, у него там кубическая сложность из-за strlen().
А зачем здесь писать что-то в память?
https://wandbox.org/permlink/OjZAbDNnsZmxeYKz
UPD: Сделал конец более хакирным.
ну вот, вместо одной строки стало четыре. Вечно вы всё усложняете...
ладно, минус я профукал, признаю
А ещё NULL и "". Но если игнорировать (как ТС-код и делает, кстати), то можно вот так загольфить:
https://wandbox.org/permlink/lahbG8Yhe6WPk87V
Но знаешь, мой код оптимизирован на перформанса, так что маргинальными случаями можно и пренеберечь. Я в доке напишу, что NULL, минус, пробел, разделитель разрядов и пустая строка в бесплатной версии не поддерживаются
Кстати, вореант с вычитанием выглядит быстрее:
Сравнение в цикле только одно, джамп тоже один.
https://gcc.godbolt.org/z/r7o3nP
!"#$%&
А, ты же не зря там u написал. Хитро.
https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
http://kurtstephens.com/files/p372-steele.pdf
Кстати
https://www.cs.sjsu.edu/~mak/CS185C/KnuthStructuredProgrammingGoTo.pdf
Ну да, вот именно поэтому я за «from_chars» (хотя с хвостовыми пробелами моя версия соснёт, кажется).
> ну и в зависимости от локали разрешать ещё разделители тысяч, опять же поддерживать японские цифры
А вот именно поэтому я за «Python»: