C ++中的字符计数器?

时间:2018-10-12 21:31:57

标签: c++ string

我正试图找到一种方法来显示字符串中的所有字符及其出现的次数。

这是我到目前为止所拥有的:

fp

然后我返回:

输入一个句子

你好

h:1

e:1

l:2

l:2

o:1

所以我有点东西,但是我不知道如何使字母不重复一次。我知道我需要将它们存储在一个数组中,但这已经超出了我的范围。

3 个答案:

答案 0 :(得分:1)

您非常亲密,不错的尝试!我喜欢使用counters数组的方法,其中每个单元格都代表给定字符串中字母的频率。

因此,只需更新此数组即可,因为此答案表示How to get character's position in alphabet in C language?,而没有在那里提到的加号,因为您想要数组中字母的索引。换句话说,对于“ a”,您需要0,“ b”,您需要1,依此类推。

然后,在印刷阶段,以相反的方式使用上面链接的建议。当您打印counters的第i个非零元素时,请打印该元素的第i个元素,这将显示有问题的字母。

将所有内容放在一起,您将得到:

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <string>

using namespace std;

int main()
{
    string st = "";

    cout << "Input a sentence: " << endl;
    getline(cin, st);
    int index = 0;
    int index2 = 0;
    int counters[26] = {0};
    for(size_t i = 0; i < st.length(); i++)
    {
        int counter = 0;
        index = st.find(st[i],0);
        for(size_t j = 0; j < st.length(); j++)
        {
            index2 = st.find(st[j]);
            if(index == index2)
            {
                counter++;
            }
        }
        counters[st[i] - 'a'] = counter; // update 'counters' array
    }
    for(int i = 0; i < 26; ++i)
        if(counters[i] != 0)            // print non-zero counters 
            cout << (char)(i + 'a') << ": " << counters[i] << endl;
    return 0;
}

输出:

e: 1
h: 1
l: 2
o: 1

答案 1 :(得分:0)

我会做这样的事情:

#include <iostream>
#include <map>
#include <string>

int main()
{
    std::string st;

    std::cout << "Input a sentence: " << std::endl;
    std::getline(std::cin, st);

    std::map<char, int> m;

    for (const char c : st)
        ++m[c];

    for (const std::pair<char, int>& me : m)
        std::cout << me.first << ": " << me.second << std::endl;
}

答案 2 :(得分:-1)

lechuga2000击败了我,但是这是我的建议:

#include <iostream>
#include <map>
#include <string>

int main()
{
    std::string input_sentence = "Now is the time for all good men to come to the aid of the party.";

/*
    std::cout << "Input a sentence: " << std::endl;
    std::getline(std::cin, input_sentence);
*/

    std::map<char, int> character_counts;

    for (const auto character : input_sentence)
        ++character_counts[character];

    for (const auto counted_character : character_counts)
        std::cout << counted_character.first << ": " << counted_character.second << '\n';

    return 0;
}

这是输出:

 : 15
.: 1
N: 1
a: 3
c: 1
d: 2
e: 6
f: 2
g: 1
h: 3
i: 3
l: 2
m: 3
n: 1
o: 8
p: 1
r: 2
s: 1
t: 7
w: 1
y: 1