Перейти к содержанию

Последнее обновление:2026-10-12

Демо сервиса коротких ссылок на C++

Настоящие сервисы коротких ссылок довольно сложны: там и алгоритмы hash, и системы выдачи номеров и т.д.

Сегодня же с позиции небольшого проекта просто смоделируем реализацию коротких ссылок.

Как быстро реализовать её буквально в нескольких десятках строк кода? Ключевые моменты:

  • как укоротить длинную ссылку
  • как хранить отношение отображения

Про отображение и говорить нечего: заводим map в персистентной памяти; если задействована база данных, доступ и запись осуществляются через интерфейсы jdbc/odbc и т.п.

Для укорачивания длинной ссылки здесь используется подход: случайный алгоритм + фиксированная длина.

1. Случайность

С помощью uniform_int_distribution генерируем случайное число из интервала [a, b]: здесь каждый раз берём один случайный символ из приведённой ниже строки, а затем склеиваем их — получается короткая ссылка.

string characters{
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"};
Включает:

  • цифры
  • строчные буквы
  • прописные буквы
uniform_int_distribution<int> distribution(0, characters.size() - 1);
string code;
for (int i = 0; i < length; ++i)
  code += characters[distribution(generator)];

2. Хранение

Каждый раз просто сохраняем всё в map, например:

if (links.count(originalLink)) {
  return links[originalLink];
}

shortCode = generateRandomCode(len);
string shortenedLink = base_url + shortCode;
links[shortenedLink] = originalLink;
Здесь сохранён базовый url, например:

string baseUrl = "https://www.google.com.hk/search";
LinkShortener shortener(baseUrl);

string originalLink = "https://www.google.com.hk/search?q=asdsad&oq=asdsad&aqs=chrome.0.69i59j69i57j69i59l2.634j0j4&sourceid=chrome&ie=UTF-8";
string shortenedLink = shortener.shortenLink(originalLink, 8);
В итоге этот url сокращается до:

https://www.google.com.hk/searchtXuOlOSt
Разве не просто? Тесты и полный код этого раздела уже выложены в закрытом сообществе — присоединяйтесь, будем учиться и расти вместе~

Похожие темы

Комментарии