【问题标题】:Counting Frequency of Characters in a string C++计算字符串C++中字符的频率
【发布时间】:2017-04-19 11:24:45
【问题描述】:

我正在尝试计算字符串输入中字母的频率。我遇到了一些麻烦,我不完全知道我做错了什么。我得到了奇怪的输出,比如笑脸。如果字符串是“abcdc”,我希望我的代码做这样的事情 一 - 1 b - 1 c - 2 d - 1

      #include <iostream>
using namespace std;




class moose
{
    char inputbuffer[132];
    char countbuffer[122];
    long count;
    short index = 0;
public:
    char charcount();
    char charinput();
    char initialize();

};

int main()
{
    moose obj;
    obj.initialize();
    obj.charinput();
    obj.charcount();
    system("pause");

}


char moose::initialize()
{
    for (int i = 0; i < 122; i++)
        countbuffer[i] = 0;
    return 0;

}

char moose::charinput()
{
    cout << "Enter your text and I'll read your characters" << endl;
    cin.getline(inputbuffer, 132);
    cin.gcount();
    count = cin.gcount();
    count--;
    return 0;
}

char moose::charcount()
{
    for (int i = 0; i < count; i++)
    {
        if (inputbuffer[i] >= 'a' & inputbuffer[i] <= 'z') {
            index = inputbuffer[i];
            countbuffer[index]++;

        }
        for (i = 0; i < count; i++)
        {
            cout << inputbuffer[i] << " - " << countbuffer[index] << endl;
        }
    }




    return 0;
}

【问题讨论】:

标签: c++ char counting


【解决方案1】:

您的代码有几个问题:

  1. moose::charinput() 方法包含对gcount() 的额外调用。您只需要这条语句:count = cin.gcount();count--; 也不应该在那里。
  2. moose::charcount() 里面的条件必须是

    if (inputbuffer[i] >= 'a' && inputbuffer[i] <= 'z')
    
  3. moose::charcount() 应该有两个不同的循环:

        char moose::charcount()
        {
            for (int i = 0; i < count; i++)
            {
                if (inputbuffer[i] >= 'a' && inputbuffer[i] <= 'z') {
                    index = inputbuffer[i];
                    countbuffer[index]++;
                }
            }
            for (i = 0; i < count; i++)
            {
                cout << inputbuffer[i] << " - " << countbuffer[inputbuffer[i]] << endl;
            }   
            return 0;
        }
    
  4. countbuffer 必须声明为 int 才能正确打印

【讨论】:

  • ^^ 这与我的原始代码没有什么不同。它并没有完全按照我的意愿行事。例如,如果我输入“aaaaaa”,它将输出 a-1 a-2 a-3 a-4 a-5 等,我试图只输出 a-6。感谢您的帮助
  • 如果这是你的意图,你的计数器数组应该是counter[26],你应该计算像counter[inputbuffer[i] - 'a']这样的字符并像cout &lt;&lt; (char)('a' + i) &lt;&lt; " - " &lt;&lt; count[i] &lt;&lt; endl;一样打印顺便说一句,你的代码不计算大写符号, 你不需要它们吗?
  • 是的,我会需要它们,以及数 0-9。我试图让我的大脑专注于如何首先输出我的小写数组。我想计算上数和数字,我将再创建两个逻辑的 For 循环。我不太清楚你对 counter[26] 和 counter[inputbuffer[i] - 'a'] 的意思,但我得到了一些想法,再次感谢您的指导!
  • 从 'a' 到 'z' 共有 26 个字符。所以你只需要 26 个数字来计算小写字符。这同样适用于打印结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2011-10-06
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多