Classificar Strings em Ordem Alfabética em C++

Jinku Hu 12 outubro 2023
  1. Use o algoritmo std::sort para classificar strings alfabeticamente em C++
  2. Use o algoritmo std::sort para classificar strings por comprimento em C++
Classificar Strings em Ordem Alfabética em C++

Este artigo demonstrará vários métodos de como classificar strings em ordem alfabética em C++.

Use o algoritmo std::sort para classificar strings alfabeticamente em C++

std::sort faz parte da biblioteca de algoritmos STL e implementa um método de classificação genérico para as estruturas baseadas em intervalos. A função geralmente classifica a seqüência dada usando o operador <; portanto, objetos de string podem ser classificados em ordem alfabética com esse comportamento padrão. std::sort aceita apenas especificadores de intervalo - o primeiro e o último iteradores de elemento. Observe que a ordem dos elementos iguais não tem garantia de ser preservada.

No exemplo a seguir, demonstramos o cenário básico, onde o vector de strings é classificado e impresso no fluxo cout.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end());

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

Resultado:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; all; and; execution; implementation; or; parameter; participate; raid; requirements; states; the;

Alternativamente, podemos usar o terceiro argumento opcional no método std::sort para especificar a função de comparação exata. Nesse caso, reimplementamos o exemplo de código anterior para comparar as últimas letras das strings e classificá-las de acordo. Observe que a função de comparação deve ter dois argumentos e retornar um valor bool. O próximo exemplo usa a expressão lambda para atuar como função de comparação e utiliza a função interna back para recuperar as últimas letras das strings.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end(),
       [](string &s1, string &s2) { return s1.back() < s2.back(); });

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

Resultado:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; raid; and; the; participate; all; implementation; execution; parameter; or; states; requirements;

Use o algoritmo std::sort para classificar strings por comprimento em C++

Outro caso útil para classificar o vetor de strings é por seu comprimento. Usaremos a mesma estrutura da função lambda do código do exemplo anterior, apenas alterando o método back pelo size. Lembre-se, porém, de que essa função de comparação não deve modificar os objetos passados ​​para ela.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end(),
       [](string &s1, string &s2) { return s1.size() < s2.size(); });

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

Resultado:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; or; all; the; and; raid; states; parameter; execution; participate; requirements; implementation;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook