0

我想创建一个函数/仿函数来计算字符串向量中字母的出现次数。

例如: 输出:
字符串:一二三四五
字母:e
频率:1 0 2 0 1

我认为我的算法会起作用(我必须使用函子、count_if 和 for_each 来解决它)但我不能将 count_if 或 for_each/我的函数 LetterFrequency 的解决方案放在 cout-Output 中。

我已经尝试过使用不同的字符串类型,...

希望你能帮助我 - 非常感谢!

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include "LetterFunctions.h"

using namespace std;

class CompareChar : public unary_function<char, bool>
{
public:
    CompareChar(char const s): mSample(s){}

    bool operator () (char const a) 
    {
        return (tolower(a) == tolower(mSample));
    }

private:
    char mSample;
};

class LetterFrequency : public unary_function<string, size_t>
{
public:
    LetterFrequency(char const s): mSample(s) {}

    size_t operator () (string const& str)
    {

        return count_if(str.begin(),str.end(),CompareChar(mSample));

    }

private:
    char mSample;
};

class PrintFrequency : public unary_function<string, void>
{
public:
    PrintFrequency(char const s): mSample(s) {}

    void operator () (string const& str)
    {
        string::difference_type i = LetterFrequency(mSample);
        cout << i << ", ";
    }

private:
    char mSample;
        };
    };
4

1 回答 1

1

线

string::difference_type i = LetterFrequency(mSample);

构造一个LetterFrequency对象并尝试将其分配给一个string::difference_type变量(可能是size_t)。正如您所料,这不起作用,因为这些类型之间没有有效的转换。它operator()(const string& str)是返回实际计数的函数,而不是构造函数,因此您需要调用该函数:

LetterFrequency lf(mSample);
string::difference_type i = lf(str);
// Or on one line:
// string::difference_type i = LetterFrequence(mSample)(str);

顺便说一句,我建议您打开编译器警告(-Wallg++ 中的标志)。这将通过警告您该参数str未使用来帮助提醒您注意问题。

于 2013-06-11T23:15:06.817 回答