C++ で文字列の文字の出現回数をカウントする

胡金庫 2023年10月12日
  1. 反復法を使用して、文字列内の文字の出現をカウントする
  2. std::tolower 関数を使用して、大文字と小文字に関係なく文字の出現をカウントする
C++ で文字列の文字の出現回数をカウントする

この記事では、C++ で文字列の文字の出現をカウントする方法のいくつかの方法について説明します。

反復法を使用して、文字列内の文字の出現をカウントする

C++ 文字列ライブラリは std::string クラスを提供します。これは、char のようなオブジェクトシーケンスを格納および操作するために使用できます。文字列内の特定の文字または部分文字列を検索して見つけるための複数のメソッドを提供しますが、この場合、すべての文字をチェックする必要があるため、count 変数をインクリメントしながら文字列を反復処理する関数を実装する方が簡単です。この関数は、string オブジェクトを参照として受け取り、char を値で受け取り、発生をカウントします。ただし、このバージョンでは大文字と小文字が区別されないため、カウントに大文字と小文字の両方を含める必要がある場合は使用できません。

#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);
}

出力:

number of char - 'e' occurrences = 4
number of char - 'h' occurrences = 1

std::tolower 関数を使用して、大文字と小文字に関係なく文字の出現をカウントする

前の例を実装する別の方法は、countOccurrences 関数を書き直して、反復ごとに文字の変換された値を比較することです。std::tolower は、unsigned char として表現できる唯一の char 引数を必要とするという点で使用が難しいことに注意してください。それ以外の場合、動作は定義されていません。したがって、キャストされた unsigned char 値を tolower 関数に渡し、それを char にキャストして一時変数 tmp に格納します。さらに、反復ごとに tolower 関数を呼び出して、比較ステートメントの文字列文字を小文字に変換します。次のコードサンプルでは、​​大文字と小文字を区別してすべてを数えることができることに注意してください。

#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);
}

出力:

number of char - 'e' occurrences = 4
number of char - 'h' occurrences = 3
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Char