Небольшая консольная утилита оценивает пароль по понятным признакам: длина, разные типы символов и частые ошибки вроде пробелов.
В этой задаче узнаешь:
• Как за один проход по строке определить типы символов (islower/isdigit/ispunct);
• Как превратить простые правила в понятную оценку;
• Как сделать вывод полезным: подсказать конкретные шаги усиления пароля.
Это не “банковская” безопасность, а удобный чек-лист, который сразу показывает, что улучшить.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32❤6👍4🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Он собрал в себе статьи с реализациями на C++, пошаговыми объяснениями и анализом сложности. Отлично подойдёт для тех кто хочет вспомнить материал для олимпиадного программирования и технических собеседований.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍7🔥3
std::filesystem: почему на Windows “file not found”, хотя путь выглядит правильным?
Частая причина — кодировка: путь пришёл как UTF-8, а
Вот типичный случай, который внезапно даёт false:
Если
Правильная привычка: если вход у тебя UTF-8 — создавай
Если путь уже в wide-форме (Windows API/GUI), используй wide-строку:
🔥 На Windows не полагайся на
📣 C++ Ready | #практика
Частая причина — кодировка: путь пришёл как UTF-8, а
std::filesystem::path из std::string на Windows конвертируется через текущую ANSI code page, и в итоге получается другой путь.Вот типичный случай, который внезапно даёт false:
std::filesystem::path p = "C:\\data\\report_2026.txt";
bool ok = std::filesystem::exists(p);
Если
p получен из внешнего мира (JSON/HTTP/CLI/конфиг) и он в UTF-8, на Windows такой std::string не обязан трактоваться как UTF-8 — и на пути с не-ASCII символами в реальности всё “ломается” тихо.Правильная привычка: если вход у тебя UTF-8 — создавай
path через u8path:auto p = std::filesystem::u8path(u8"C:\\data\\report_2026.txt");
bool ok = std::filesystem::exists(p);
Если путь уже в wide-форме (Windows API/GUI), используй wide-строку:
std::filesystem::path p = L"C:\\data\\report_2026.txt";
bool ok = std::filesystem::exists(p);
path из обычного std::string, если строки у тебя UTF-8. Для путей с не-ASCII символами выбирай u8path или wide.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤9🔥3
На картинке — круговая шпаргалка с ключевыми практиками, которые делают код чище и понятнее: SOLID, тестируемость, умеренная абстракция, паттерны проектирования, снижение глобальных зависимостей, рефакторинг, надёжность, документация/аннотации, спецификации и безопасность.
Сохрани, чтобы reminder всегда был под рукой — удобно сверяться перед ревью или когда приводишь в порядок легаси!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤6🤝5👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤6👍6🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь быстро понять, чем Python отличается от C++, Rust или JavaScript. Здесь синтаксис, структура, идиомы и концепции разных языков сравниваются в таблицах, так что можно буквально увидеть, как одна и та же задача решается на разных языках. Это отличный способ прокачать мультиязычное мышление, выбрать язык под задачу или просто пронаблюдать сходства и различия.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍12🔥4🤝2
Почему -1 > 2U может оказаться true?
Это один из самых коварных C++-сюрпризов: когда сравниваешь signed и unsigned, включаются “usual arithmetic conversions”. В итоге
То есть вот это сравнение может дать неожиданный результат:
Потому что
Начиная с C++20 есть безопасные функции сравнения, которые корректно работают для любых signed/unsigned:
Их удобно использовать в типичном кейсе с индексами/размерами контейнеров:
🔥 Либо держи одинаковые типы у величин, которые сравниваешь (размеры/индексы), либо используй
📣 C++ Ready | #совет
Это один из самых коварных C++-сюрпризов: когда сравниваешь signed и unsigned, включаются “usual arithmetic conversions”. В итоге
int может быть неявно приведён к unsigned, и отрицательное число превращается в огромное положительное.То есть вот это сравнение может дать неожиданный результат:
int x = -1;
std::size_t y = 2;
x > y;
Потому что
x неявно становится чем-то вроде “максимально большого size_t”.Начиная с C++20 есть безопасные функции сравнения, которые корректно работают для любых signed/unsigned:
std::cmp_less(x, y);
std::cmp_greater(x, y);
Их удобно использовать в типичном кейсе с индексами/размерами контейнеров:
if (std::cmp_less(i, v.size())) {
// i гарантированно < size без ловушек signed/unsigned
}std::cmp_less/std::cmp_greaterPlease open Telegram to view this post
VIEW IN TELEGRAM
👍21❤9👎4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте есть структурированные туториалы с примерами, а ещё — раздел Practice с тысячами задач по кодингу и интерактивные инструменты вроде онлайн-песочниц/компиляторов для практики прямо в браузере.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍6🔥4
std::filesystem::u8path устарел в C++20: что писать вместо него?
Причина простая: появился
Старый код начинает ругаться на deprecated:
В новом коде просто конструируй
Если путь приходит как UTF-8 в
🔥
📣 C++ Ready | #практика
Причина простая: появился
char8_t, и UTF-8 теперь можно передавать в std::filesystem::path напрямую.Старый код начинает ругаться на deprecated:
namespace fs = std::filesystem;
fs::path p = fs::u8path(u8"C:\\data\\logs\\today.txt");
В новом коде просто конструируй
path из UTF-8:namespace fs = std::filesystem;
fs::path p1 = fs::path(u8"C:\\data\\logs\\today.txt");
std::u8string s = u8"C:\\data\\logs\\today.txt";
fs::path p2 = fs::path(s);
Если путь приходит как UTF-8 в
std::string (конфиг/CLI/JSON), сначала переложи байты в std::u8string, а потом сделай path:namespace fs = std::filesystem;
fs::path from_utf8(std::string_view s) {
std::u8string u8;
u8.reserve(s.size());
for (unsigned char ch : s) u8.push_back(static_cast<char8_t>(ch));
return fs::path(u8);
}
u8path больше не нужен. Для u8"..." и std::u8string используй fs::path(...), а для UTF-8 в std::string — один раз переводи байты в std::u8string.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥6❤5😁1
Идея: пишете кусок C++ в ячейке → жмёте Run → сразу видите вывод/ошибки компиляции → добавляете следующую ячейку и продолжаете.
Зачем это нужно:
• быстрые эксперименты (алгоритмы, шаблоны, API)
• прототипирование без проекта/сборки
• моментальная обратная связь по ошибкам
Это не замена нормальной разработки (CMake, тесты, профилирование), а удобный режим для малых задач и объяснений.
Посмотреть доклад + видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5🤝4👍1
Почему “в Debug работает, а в Release падает”?
Потому что ты берёшь
Временный
В Debug память часто “ещё не затёрли”, а в Release оптимизации/раскладка меняются, и после:
Правильно — держать строку живой:
🔥 Паттерн
📣 C++ Ready | #совет
Потому что ты берёшь
c_str() у временной строки:const char* p = std::string("neo").c_str();Временный
std::string("neo") уничтожается в конце выражения — и p сразу становится висячим указателем. В Debug память часто “ещё не затёрли”, а в Release оптимизации/раскладка меняются, и после:
std::string s = "morpheus";
p начинает указывать в мусор (или падает).Правильно — держать строку живой:
std::string tmp = "neo";
const char* p = tmp.c_str();
something().c_str() почти всегда = “Debug ок / Release боль”. Сохраняй объект в переменную или меняй интерфейс (например, на std::string_view).Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤10🔥6