Ir para o conteúdo

Ú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.

string characters{
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"};
Ela contém:

  • 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;
Aqui manteve-se a url base, por exemplo:

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);
Por fim, esta url pode ser encurtada para:

https://www.google.com.hk/searchtXuOlOSt
Simples, não? Os testes e o código completo desta seção já foram publicados na planeta; junte-se a nós para estudar e crescer juntos~

Tópicos relacionados

Comentários