- 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?
Иногда в магазине я чувствую себя единственным человеком, который разбирается в категориях яиц.
Все яйца всегда подписаны, но создается ощущение, что люди покупают их только глядя на цену. Это пиздец!
Есть два главных различия - бывают яйца диетические (Д) и столовые (С). Тут все просто. Диетические - яйца, которым меньше недели, - в магазинах сегодня обычно не продаются. Столовые - яйца, которые надо продать в течение месяца.
Так как на свете ни один производитель не уверен, что его продукция продастся за неделю, все сразу на упаковке пишут категорию С.
Кстати, яйца можно хранить несколько месяцев в тепле. Для этого нужно их раз в пару дней переворачивать, чтобы внутри стенки не засыхали и не гнили. Этот лайфхак используют все яхтсмены, которые любят кушинькать яишеньку в трансатлантическом переходе.
Дальше самое важное - обратить внимание на сорт. Чем крупнее число, тем мельче продукт, как у устриц. 3 - яйцо третьей категории, самое мелкое. 1 - крупнее. О - еще крупнее, но означает «отборное», а не «ноль». А буква В означает высшую категорию. Это самое крупное яйцо, в два раза крупнее, чем 3.
Есть маркетинговая байка, что самые мелкие яйца несут молодые, здоровые и бодрые курочки, а высшую категорию производят только старородящие, пожилые и разъебанные куры. Это все хуйня полная. Если бы это было так, яйцо С3 стоило бы в пять раз дороже СВ.
Короче, в магазине ищите СВ или хотя бы СО. Потому что ДВ все равно не найти даже в Глобусе-гурме.
Тогда нужно яйца ХВ
Но они редко продаются, раз в год где-то.
А еще помните, что объем пропорционален кубу линейных размеров.
--
В русском языке порядок слов не фиксированный (в отличие, например, от германских языков) но очень важны пунктуационные знаки
>char
Буквы у нас только однобайтовые?
> State0
Это автогенеренный код? Человек не мог же так назвать переменную, и такой копрофажской кодстайл тоже не мог
>isalpha
см замечание про чар
> goto StateWord;
Да бля, почему не сделать отдельные функции?
Вполне возможно, что да. Тогда код имеет смысл.
> Это автогенеренный код? Человек не мог же так назвать переменную, и такой копрофажской кодстайл тоже не мог
В контектсте в принципе понятное название — стартовое состояние/состояние по умолчанию. StateDefault или StateEmpty, конечно лучше бы пошли.
> Человек не мог же так назвать переменную
Человек не мог назвать перечислитель переменной.
> Да бля, почему не сделать отдельные функции?
Ещё лучше — это конечный автомат. Есть куча либ, куча книг о их реализации, нет, будем фигачить свищ с готу.
ps: почему кстати не взять готовый генератор лексеров?
Спроси ОПа.
Щас сюда набежит j123123 и скажет, что все эти генераторы, лексеры и автоматы в контроллеры не влезают.
>>RoostreamPorkser::handle
А наверное еще и от сключений придеца отказаца?
Но и тут есть облегчённые библиотеки, которые возвращают большую часть обратно. Обычно лишаешься iostreams (потому что говно), говна, завязанного на STDIN/STDOUT (потому что этого нет), поддержки многопоточности (которой на контроллерах обычно нет), исключений и удобного дебага (потому что места нет, блджад), особо сложной математики, возможно — поддержки плавучки. Часто ещё можно отрубить динамическую аллокацию, тогда сломается всё, что её использует.
>Часто ещё можно отрубить динамическую аллокацию
то есть коллекции сразу пойдут нахуй анлесс ты им свой кастомный аллохатор на аренах не сунешь?
Херня, которая соедствами абсрактной машины не выражается. Всё, что требует взаимодействия с ОС. Нешаблонные функции. Сишная либа (в принципе входит в нешаблонные функции, но похуй).
> то есть коллекции сразу пойдут нахуй анлесс ты им свой кастомный аллохатор на аренах не сунешь?
Есть единственный полезный тип данных...
std::array не испытывает никаких проблем.
>std::array
Это вроде обычный аррей, но с цисгендерной семантикой валуе тайпа (копируется и пр) и не превщащается в указатель?
-Понял тебя!..
Взял я буфер -- массив 4096 байт, заполнил его нолями, и считал туда немного букв в однобайтной кодировке.
Ну вот например первые три буквы это буквы, а дальше -- ноли.
Теперь хочу получить из него строку.
В современных высокоуровневых языках типа С++ это делается довольно просто: пихаешь в std::string это массив, там его встречают, как сишную строку, и высасывают текст до первого ноля.
В устаревших низкоуровневых языках такого прикольного сахара нет. Возьмем, скажем, Go:
Но можно сделать и еще смешнее
Такой вот нежданчик. Думаю переписать утилиты с Go на С++ чтобы упростить и ускорить разработку и уменьшить количество потенциальных ошибок
А можно взять реверснутый итератор и ьтичулоп перевернутую строку?
>Copies the sequence of characters in the range [first,last), in the same order.
Полагаю, ты хотел меня наибать, и сэмулировать повидение Goвна?
Просто именно для кейса с указателем на чар там запилен спешл кейс для совместимости с сишкой и сишкиным литералом, да?
Что значит "получить строку"? С точки зрения языка "Си", это у тебя и так нуль-терминированная строка. Можешь ее продублировать через фунцкию "strdup" если хочешь
Мужчина: подержи моё пиво