如何"count_if"字符串的 -STL 函数?

how to cout "count_if"-STL-function of a string?

本文关键字:-STL 函数 if count 如何 字符串      更新时间:2023-10-16

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

例如

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

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

我已经尝试过使用difference_type of string,…

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

#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;
        };
    };

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);

作为题外话,我建议您打开编译器警告(g++中的-Wall标志)。这将通过警告您参数str未使用来帮助提醒您注意这个问题。