Classificar Strings em Ordem Alfabética em C++
-
Use o algoritmo
std::sort
para classificar strings alfabeticamente em C++ -
Use o algoritmo
std::sort
para classificar strings por comprimento 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;
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