Contar ocorrências de um caractere em String C++
- Use o método iterativo para contar ocorrências de um caractere em uma string
-
Use a função
std::tolower
para contar ocorrências de caracteres independentemente da caixa das letras
Este artigo explicará vários métodos de como contar ocorrências de um caractere em uma string C++.
Use o método iterativo para contar ocorrências de um caractere em uma string
A biblioteca de strings C++ fornece uma classe std::string
, que pode ser usada para armazenar e manipular sequências de objetos semelhantes a char
. Ele fornece vários métodos para pesquisar e encontrar o caractere fornecido ou uma substring na string, mas neste caso, precisamos verificar cada caractere para que seja mais simples implementar uma função que itera através da string enquanto incrementa a variável count
. Esta função leva um objeto string
como referência e um char
por valor para contar as ocorrências. Lembre-se, porém, de que esta versão não distingue as letras maiúsculas das mais baixas, por isso não pode ser usada quando a contagem deve incluir caracteres superiores e inferiores.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
size_t countOccurrences(char c, string &str) {
size_t count = 0;
for (char i : str)
if (i == c) count++;
return count;
}
int main() {
char ch1 = 'e';
char ch2 = 'h';
string str1("hello there, how are you doing?");
string str2("Hello there! How are you doing?");
cout << "number of char - '" << ch1
<< "' occurrences = " << countOccurrences(ch1, str1) << endl;
cout << "number of char - '" << ch2
<< "' occurrences = " << countOccurrences(ch2, str2) << endl;
exit(EXIT_SUCCESS);
}
Resultado:
number of char - 'e' occurrences = 4
number of char - 'h' occurrences = 1
Use a função std::tolower
para contar ocorrências de caracteres independentemente da caixa das letras
Outro método para implementar o exemplo anterior é reescrever a função countOccurrences
para comparar os valores convertidos dos caracteres a cada iteração. Observe que std::tolower
é complicado de usar, pois requer que o único argumento char
seja representável como unsigned char
; caso contrário, o comportamento é indefinido. Assim, passamos o valor de cast unsigned char
para a função tolower
e então convertemos de volta para char
para armazenar em uma variável temporária - tmp
. Além disso, chamamos a função tolower
a cada iteração para converter os caracteres da string em letras minúsculas para a instrução de comparação. Observe que o exemplo de código a seguir pode distinguir os caracteres em maiúsculas e minúsculas e contá-los todos.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
size_t countOccurrences(char c, string &str) {
size_t count = 0;
char tmp = static_cast<char>(tolower(static_cast<unsigned char>(c)));
for (char i : str)
if (tolower(static_cast<unsigned char>(i)) == tmp) count++;
return count;
}
int main() {
char ch1 = 'e';
char ch2 = 'h';
string str1("hello there, how are you doing?");
string str2("Hello there! How are you doing?");
cout << "number of char - '" << ch1
<< "' occurrences = " << countOccurrences(ch1, str1) << endl;
cout << "number of char - '" << ch2
<< "' occurrences = " << countOccurrences(ch2, str2) << endl;
exit(EXIT_SUCCESS);
}
Resultado:
number of char - 'e' occurrences = 4
number of char - 'h' occurrences = 3
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