Última atualização:2026-10-12
Demo de serviço de URL curta em C++¶
Um serviço de URL curta real é relativamente complexo, envolvendo, por exemplo: algoritmos de hash, sistemas de distribuição de números etc.
Hoje vamos apenas simular uma implementação de URL curta do ponto de vista de um projeto pequeno.
Como implementar rapidamente uma com poucas dezenas de linhas de código? Os pontos-chave envolvidos:
- Como encurtar a URL longa
- Como armazenar a relação de mapeamento
A relação de mapeamento não há muito o que dizer: um map para persistir em memória; se houver banco de dados envolvido, é preciso escrever nele por meio de interfaces jdbc/odbc etc.
Para encurtar a URL longa, adota-se aqui a abordagem de algoritmo aleatório + comprimento fixo.
1.Aleatório¶
Com uniform_int_distribution, gera-se um número aleatório no intervalo [a, b]; aqui, sorteia-se aleatoriamente um caractere por vez da string abaixo e, ao concatená-los no final, obtém-se a URL curta.
- dígitos
- letras minúsculas
- letras maiúsculas
uniform_int_distribution<int> distribution(0, characters.size() - 1);
string code;
for (int i = 0; i < length; ++i)
code += characters[distribution(generator)];
2.Armazenamento¶
Basta armazená-la no map a cada vez, por exemplo:
if (links.count(originalLink)) {
return links[originalLink];
}
shortCode = generateRandomCode(len);
string shortenedLink = base_url + shortCode;
links[shortenedLink] = originalLink;
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);
Tópicos relacionados¶
- Escrevendo C++ FnOnce à mão | C++那些事
- Pequeno projeto de gRPC em C++ | C++那些事
- Comunicação entre processos em C++ na prática | C++那些事
- C++17 e SQLite para medir o tamanho de diretórios | C++那些事
- Testes de performance com Google Benchmark | C++那些事
- Servidor HTTP com corrotinas do C++20 | C++那些事
- Serialização ZeroCopy com Protobuf | C++那些事
- Acelerando Python com pybind11 | C++那些事
- Projeto de calculadora em pilha em C++ | C++那些事