C++ で文字列の文字の出現回数をカウントする
胡金庫
2023年10月12日
この記事では、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
著者: 胡金庫