Ú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.
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:
¿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¶
- Implementando C++ FnOnce a mano | C++那些事
- Pequeño proyecto gRPC en C++ | C++那些事
- Comunicación entre procesos en C++ en la práctica | C++那些事
- C++17 y SQLite para medir el tamaño de directorios | C++那些事
- Pruebas de rendimiento con Google Benchmark | C++那些事
- Servidor HTTP con corrutinas de C++20 | C++那些事
- Serialización ZeroCopy con Protobuf | C++那些事
- Acelerar Python con pybind11 | C++那些事
- Diseño de una calculadora de pila en C++ | C++那些事