Contar ocorrências de um caractere em String C++

Jinku Hu 12 outubro 2023
  1. Use o método iterativo para contar ocorrências de um caractere em uma string
  2. Use a função std::tolower para contar ocorrências de caracteres independentemente da caixa das letras
Contar ocorrências de um caractere em String C++

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

Artigo relacionado - C++ Char