- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
void RoostreamPorkser::handle(char c)
{
switch (m_state) {
case State0:
State0:
if (isdigit(c)) {
m_number = 0;
m_state = StateNumber;
goto StateNumber;
} else if (isalpha(c)) {
m_word = "";
m_state = StateWord;
goto StateWord;
}
break;
case StateNumber:
StateNumber:
if (isdigit(c)) {
m_number = m_number * 10 + c - '0';
} else {
handleNumber(m_number);
m_state = State0;
goto State0;
}
break;
case StateWord:
StateWord:
if (isalpha(c)) {
m_word += tolower(c);
} else {
handleWord(m_word);
m_state = State0;
goto State0;
}
break;
/*
// Или лучше так
case StateNumber:
if (!isdigit(c)) {
handleNumber(m_number);
m_state = State0;
goto State0;
}
StateNumber:
m_number = m_number * 10 + c - '0';
break;
*/
}
}
Например, задача: есть поток символов, в нем встречаются числа и слова, которые нужно обработать (прочие символы игнорируются).
Не говно или всё-таки goto(с)?
Перепиши на Java?
Apa6cKuu_nemyx 30.09.2022 13:50 # +1
Иногда в магазине я чувствую себя единственным человеком, который разбирается в категориях яиц.
Все яйца всегда подписаны, но создается ощущение, что люди покупают их только глядя на цену. Это пиздец!
Есть два главных различия - бывают яйца диетические (Д) и столовые (С). Тут все просто. Диетические - яйца, которым меньше недели, - в магазинах сегодня обычно не продаются. Столовые - яйца, которые надо продать в течение месяца.
Так как на свете ни один производитель не уверен, что его продукция продастся за неделю, все сразу на упаковке пишут категорию С.
Кстати, яйца можно хранить несколько месяцев в тепле. Для этого нужно их раз в пару дней переворачивать, чтобы внутри стенки не засыхали и не гнили. Этот лайфхак используют все яхтсмены, которые любят кушинькать яишеньку в трансатлантическом переходе.
Дальше самое важное - обратить внимание на сорт. Чем крупнее число, тем мельче продукт, как у устриц. 3 - яйцо третьей категории, самое мелкое. 1 - крупнее. О - еще крупнее, но означает «отборное», а не «ноль». А буква В означает высшую категорию. Это самое крупное яйцо, в два раза крупнее, чем 3.
Есть маркетинговая байка, что самые мелкие яйца несут молодые, здоровые и бодрые курочки, а высшую категорию производят только старородящие, пожилые и разъебанные куры. Это все хуйня полная. Если бы это было так, яйцо С3 стоило бы в пять раз дороже СВ.
Короче, в магазине ищите СВ или хотя бы СО. Потому что ДВ все равно не найти даже в Глобусе-гурме.
ISO 30.09.2022 14:02 # 0
Steve_Brown 30.09.2022 14:54 # 0
Тогда нужно яйца ХВ
Но они редко продаются, раз в год где-то.
А еще помните, что объем пропорционален кубу линейных размеров.
guest6_uebok 30.09.2022 15:54 # 0
KPblCA 30.09.2022 16:02 # 0
guest6 30.09.2022 14:59 # 0
--
В русском языке порядок слов не фиксированный (в отличие, например, от германских языков) но очень важны пунктуационные знаки
guest6 30.09.2022 15:31 # +1
>char
Буквы у нас только однобайтовые?
> State0
Это автогенеренный код? Человек не мог же так назвать переменную, и такой копрофажской кодстайл тоже не мог
>isalpha
см замечание про чар
> goto StateWord;
Да бля, почему не сделать отдельные функции?
Soul_re@ver 30.09.2022 15:46 # +1
Вполне возможно, что да. Тогда код имеет смысл.
> Это автогенеренный код? Человек не мог же так назвать переменную, и такой копрофажской кодстайл тоже не мог
В контектсте в принципе понятное название — стартовое состояние/состояние по умолчанию. StateDefault или StateEmpty, конечно лучше бы пошли.
> Человек не мог же так назвать переменную
Человек не мог назвать перечислитель переменной.
> Да бля, почему не сделать отдельные функции?
Ещё лучше — это конечный автомат. Есть куча либ, куча книг о их реализации, нет, будем фигачить свищ с готу.
guest6 30.09.2022 15:59 # 0
ps: почему кстати не взять готовый генератор лексеров?
Soul_re@ver 30.09.2022 16:11 # 0
Спроси ОПа.
Щас сюда набежит j123123 и скажет, что все эти генераторы, лексеры и автоматы в контроллеры не влезают.
guest6 30.09.2022 16:17 # 0
>>RoostreamPorkser::handle
Soul_re@ver 30.09.2022 16:21 # 0
guest6 30.09.2022 16:26 # 0
А наверное еще и от сключений придеца отказаца?
Soul_re@ver 30.09.2022 16:40 # 0
Но и тут есть облегчённые библиотеки, которые возвращают большую часть обратно. Обычно лишаешься iostreams (потому что говно), говна, завязанного на STDIN/STDOUT (потому что этого нет), поддержки многопоточности (которой на контроллерах обычно нет), исключений и удобного дебага (потому что места нет, блджад), особо сложной математики, возможно — поддержки плавучки. Часто ещё можно отрубить динамическую аллокацию, тогда сломается всё, что её использует.
guest6 30.09.2022 16:45 # 0
>Часто ещё можно отрубить динамическую аллокацию
то есть коллекции сразу пойдут нахуй анлесс ты им свой кастомный аллохатор на аренах не сунешь?
Soul_re@ver 30.09.2022 16:53 # 0
Херня, которая соедствами абсрактной машины не выражается. Всё, что требует взаимодействия с ОС. Нешаблонные функции. Сишная либа (в принципе входит в нешаблонные функции, но похуй).
> то есть коллекции сразу пойдут нахуй анлесс ты им свой кастомный аллохатор на аренах не сунешь?
Есть единственный полезный тип данных...
std::array не испытывает никаких проблем.
guest6 30.09.2022 17:06 # 0
>std::array
Это вроде обычный аррей, но с цисгендерной семантикой валуе тайпа (копируется и пр) и не превщащается в указатель?
JlAKOMKA 30.09.2022 21:24 # 0
-Понял тебя!..
guest6 30.09.2022 16:24 # +1
Взял я буфер -- массив 4096 байт, заполнил его нолями, и считал туда немного букв в однобайтной кодировке.
Ну вот например первые три буквы это буквы, а дальше -- ноли.
Теперь хочу получить из него строку.
В современных высокоуровневых языках типа С++ это делается довольно просто: пихаешь в std::string это массив, там его встречают, как сишную строку, и высасывают текст до первого ноля.
В устаревших низкоуровневых языках такого прикольного сахара нет. Возьмем, скажем, Go:
Но можно сделать и еще смешнее
Такой вот нежданчик. Думаю переписать утилиты с Go на С++ чтобы упростить и ускорить разработку и уменьшить количество потенциальных ошибок
Soul_re@ver 30.09.2022 16:48 # 0
guest6 30.09.2022 17:27 # 0
А можно взять реверснутый итератор и ьтичулоп перевернутую строку?
Soul_re@ver 30.09.2022 17:37 # 0
guest6 30.09.2022 17:41 # 0
>Copies the sequence of characters in the range [first,last), in the same order.
Полагаю, ты хотел меня наибать, и сэмулировать повидение Goвна?
Soul_re@ver 30.09.2022 17:55 # 0
guest6 30.09.2022 17:58 # 0
Просто именно для кейса с указателем на чар там запилен спешл кейс для совместимости с сишкой и сишкиным литералом, да?
j123123 01.10.2022 08:45 # 0
Что значит "получить строку"? С точки зрения языка "Си", это у тебя и так нуль-терминированная строка. Можешь ее продублировать через фунцкию "strdup" если хочешь
guest6 30.09.2022 17:56 # 0
Мужчина: подержи моё пиво