C++ “怎么做?”;计数“如果”-字符串的STL函数?

C++ “怎么做?”;计数“如果”-字符串的STL函数?,c++,foreach,cout,countif,C++,Foreach,Cout,Countif,我想创建一个计算字符串向量中字母出现次数的函数/函子 例如: 输出: 字符串:一二三四五 字母:e 频率:10201 我认为我的算法是可行的(我必须使用函子,count\u if和for\u each来解决它),但我不能将count\u if或for\u each/我的函数LetterFrequency的解放在cout输出上 我已经尝试过使用不同类型的字符串 希望你能帮助我-非常感谢 #include <iostream> #include <algorithm> #in

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

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

我认为我的算法是可行的(我必须使用函子,count\u if和for\u each来解决它),但我不能将count\u if或for\u each/我的函数LetterFrequency的解放在cout输出上

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

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

#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;
        };
    };
#包括
#包括
#包括
#包括
#包括“LetterFunctions.h”
使用名称空间std;
类CompareChar:公共一元函数
{
公众:
CompareChar(char const s):mSample(s){}
布尔运算符()(字符常量a)
{
返回(tolower(a)=tolower(mSample));
}
私人:
字符样本;
};
类字母频率:公共一元函数
{
公众:
字母频率(字符常量):mSample(s){
size\u t运算符()(字符串常量和字符串)
{
返回count_if(str.begin()、str.end()、CompareChar(mSample));
}
私人:
字符样本;
};
类PrintFrequency:公共一元函数
{
公众:
打印频率(字符常量):mSample(s){
void运算符()(字符串常量和字符串)
{
字符串::差异类型i=字母频率(mSample);
不能

string::difference_type i = LetterFrequency(mSample);
构造一个
LetterFrequency
对象,并尝试将其分配给
string::difference\u type
变量(可能是
size\t
)。正如您所预料的那样,由于这些类型之间没有有效的转换,所以这不起作用。它是
运算符()
返回实际计数的函数,而不是构造函数,因此需要调用该函数:

LetterFrequency lf(mSample);
string::difference_type i = lf(str);
// Or on one line:
// string::difference_type i = LetterFrequence(mSample)(str);
另一方面,我建议您打开编译器警告(g++中的
-Wall
标志)。这会通过警告您参数
str
未使用来提醒您这个问题