文字列内のすべての文字をカウントする関数を C++ で書きたいと思います。 :
string alphabet {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
文字の出現頻度を格納するために使用されるベクトル。たとえば、A は 0 の位置にあり、B は 0 の位置にあるなどです。
vector<long> letterCount (26);
私はそれが機能するはずだと思うように関数を書きました.文字の出現を把握できるようですが、その後、この数字はアルファベットの文字の場所で乗算されます. 関数は次のとおりです。
long countLetters(int& p) {
for(int i = 0; i < alphabet.size(); ++i) {
for(long j = 0; j < count(input.begin(), input.end(), alphabet.at(i)) {
countLetters.at(i)++;
}
}
return letterCount.at(p);
}
たとえば、入力が「HELLO」の場合、プログラムは次のように出力します。
E : 5
H : 8
L : 24
O : 15
たとえば、文字 'L' は文字列に 2 回含まれていますが、'L' はアルファベットの 12 番目にあるため、'L' の結果は 24 になります。
私の問題が何であるかを理解したら、助けてください。
編集:少なくとも部分的に機能する方法を見つけました:
long countLetters(int& p) {
for(size_t i = 0; i < input.length(); ++i) {
for(size_t j = 0; j < alphabet.length(); ++j) {
letterCount.at(j) = count(input.begin(), input.end(), alphabet.at(j));
}
}
return letterCount.at(p);
}
しかし、2 つ以上の単語を入力すると、関数は最初の単語の文字出現のみを計算します。より多くの単語を分析するにはどうすればよいですか?
編集:私が持っていた前ですがcin >> input
、getline(cin, input);
正しいです。