Saltar a contenido

Última actualización:2026-10-12

Demo de servicio de URL cortas en C++

Un sistema real de URL cortas es relativamente complejo: algoritmos hash, sistemas de numeración, etc.

Hoy simplemente simulamos, desde la perspectiva de un pequeño proyecto, la implementación de URLs cortas.

¿Cómo implementar una rápidamente con apenas unas decenas de líneas de código? Los puntos clave que intervienen son:

  • Cómo acortar el enlace largo
  • Cómo almacenar la relación de mapeo

La relación de mapeo no necesita explicación: basta con un map que persista en memoria; si hay base de datos implicada, hay que escribirla en la base de datos a través de interfaces como jdbc/odbc.

Para acortar el enlace largo, aquí se usa el enfoque de algoritmo aleatorio + longitud fija.

1. Aleatoriedad

Mediante uniform_int_distribution se genera un número aleatorio en el intervalo [a, b]; aquí se toma cada vez un carácter al azar de la cadena siguiente y, concatenándolos al final, se obtiene el enlace corto.

string characters{
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"};

Incluye:

  • dígitos
  • letras minúsculas
  • letras mayúsculas
uniform_int_distribution<int> distribution(0, characters.size() - 1);
string code;
for (int i = 0; i < length; ++i)
  code += characters[distribution(generator)];

2. Almacenamiento

Basta con almacenarla cada vez en un map, por ejemplo:

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

shortCode = generateRandomCode(len);
string shortenedLink = base_url + shortCode;
links[shortenedLink] = originalLink;

Aquí se conserva la url base; por ejemplo:

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);

Finalmente, esta url puede acortarse a:

https://www.google.com.hk/searchtXuOlOSt

¿No es sencillísimo? Las pruebas y el código completo de esta sección ya están publicados en la comunidad 星球; únete para aprender y crecer juntos~

Temas relacionados

Comentarios