Крылатый
А можно текстом кол?
Крылатый
код*
Крылатый
А то с картинки неудобно жуть.
Micktu 😬
да, сейчас
Micktu 😬
str_t lb_to_lit(const str_t &in) { str_t out(2 * in.length(), '\0'); size_t i = 0; for (char c : in) { if (c == '\r') continue; if (c == '\n') { out[i++] = '\\'; out[i++] = 'n'; continue; } out[i++] = c; } out.resize(i); return out; }
Крылатый
Спасибо.
🦥Alex Fails
Просьба всем: не пишите кучу сообщений. Пишите в одном. В крайнем случае можно пропатчить свое сообщение
Micktu 😬
меня сильно портит общение со школьниками
🦥Alex Fails
Да оно портит весь интернет, он от него тупеет
Artem
ты же не любишь инкремент. Почему не пишешь out[i] = '\\'; i += 1;?
Micktu 😬
потому что если есть, то почему бы нет :)
Artem
Micktu 😬
а вот наоборот. немного отличается
Micktu 😬
str_t lit_to_lb(const str_t &in) { str_t out(in.length(), '\0'); size_t i = 0; for (auto it = in.begin(); it != in.end(); ++it) { if (*it != '\\' || *(it + 1) != 'n') { out[i++] = *it; continue; } out[i++] = '\r'; out[i++] = '\n'; it++; } return out; }
Micktu 😬
я не проверяю на (it + 1) == in.end(), потому что там нуль-сепаратор, duh
Micktu 😬
тоже годится
Micktu 😬
щас еще один алгоритм на замену регекса напишу
Evgenii
красота
Почему бы не сделать один switch вместо того чтобы городить ифы?
Micktu 😬
потому что ифов мало и это лаконично и быстро
Micktu 😬
свитч более громозкий
Micktu 😬
щас еще один алгоритм на замену регекса напишу
разгоню эту программу раз в пять
Micktu 😬
большую часть проц. времени жрут два регекса
Micktu 😬
а не мой код и не дисковые операции
Micktu 😬
легкий филиал ада
Micktu 😬
я заменю это на мэп
Micktu 😬
вместо статических полей, они мне не всрались
Крылатый
Тупой вариант влоб
Крылатый
str_t lb_to_lit(const str_t& in) { str_t out; out.reserve(2 * in.length()); auto func = [&out](const str_t::value_type value) { switch(value) { '\n': { out.push_back('\\'); out.push_back('n'); break; } '\r': { out.push_back('\0'); break; } default: { out.push_back(value); } }; }; for_each(begin(in), end(in), func); out.resize(); return out; }
Micktu 😬
ужасно
Micktu 😬
))
Micktu 😬
мало того что хрен прочьешь
Micktu 😬
медленно
Micktu 😬
и out.push_back('\0') не всрался
Micktu 😬
там просто брейк
Micktu 😬
и out.reserve(2 * in.length()); не будет работать
Deleted Account
там просто брейк
пропатчивай все сообщения в одно
Micktu 😬
хотя я ща сам проверю
Крылатый
Я не проверял на собираемость.
Micktu 😬
никогда не пробовал ресайз без параметров.
Micktu 😬
резерв определенно был бы лучше инициализации... просто у меня была проблема с комбо reserve-resize
Micktu 😬
он по каким-то соображениям зануливает все что между педыдущим сайзом (а он 0) и новым
Micktu 😬
ща проверю.
cyber
switch без case?
Крылатый
Говорю же, тяп-ляп писал)
Micktu 😬
ресайза без параметров не существует
Micktu 😬
так что увы ваариант с резервом не прокатит
Micktu 😬
серьезно, я за голову уже хватался с этим
Micktu 😬
пытался сдеалть то же самое но нет, строку ОБЯЗАТЕЛЬНо инициализировать. нельзя просто зарезервироваь, заполнить и ресайзнуть
Micktu 😬
я думаю там логика "если предыдущий размер меньше нового, обнулить память в этом промежутке"
Micktu 😬
так вот он затирает то, что ты в резерв записал
Крылатый
Можно в векторе херачить.
Micktu 😬
угу, можно
Micktu 😬
но
Крылатый
И потом строить струку по нему.
Micktu 😬
там тоже самое поведение :)))))))))
Крылатый
строку*
Micktu 😬
тоже нельзя ресерв ресайз.
Крылатый
Эээ.
Крылатый
Ну можно ещё хранить аргументом число символов.
Крылатый
И ресайзить опосля.
Micktu 😬
я не знаю теории, но пытался дслеать это оптимально разными способами, и строка и вектор страдают одной и тое же херней
Micktu 😬
инициализируют память при увеличении размера
Micktu 😬
стирают все
Micktu 😬
поэтому я сразу делаю инициализацию
Micktu 😬
тут не сэкономишь...
cyber
чего вы хоитте добиться?
Крылатый
Оптимально и функционально)
cyber
это, мне кажется, антонимы для многих алгоритмов
Крылатый
А, мой пример ещё и некорректный.
Micktu 😬
чего вы хоитте добиться?
состязание в простых алгоритмах :))
Micktu 😬
я просто написал самое оптимальное что мог придумать, Пегас подтянулся со своей версией
Micktu 😬
правда не совсем самое оптимальное. надо развернуть логику условий, потому что отрицание встречается чаще
Micktu 😬
так что начать с != \r, != n
Micktu 😬
потом иф == \n
Micktu 😬
и все