C++ 扩展程序以计算行频率

C++ 扩展程序以计算行频率,c++,C++,我有一个简单的程序来计算单词的频率: #include <iostream> #include <map> #include <cctype> #include <string> using namespace std; int main(void) { map<string, int> words; map<string, int>::iterator i; string s; while (cin >>

我有一个简单的程序来计算单词的频率:

#include <iostream>
#include <map>
#include <cctype>
#include <string>
using namespace std;
int main(void) {
  map<string, int> words;
  map<string, int>::iterator i;
string s;
while (cin >> s) {
    transform(s.begin(), s.end(), s.begin(), ::tolower);
words[s]++;
  }
for (i=words.begin(); i != words.end(); i++)
    cout << i->first << " " << i->second << endl;
return 0;
#包括
#包括
#包括
#包括
使用名称空间std;
内部主(空){
地图词;
迭代器i;
字符串s;
而(cin>>s){
转换(s.begin(),s.end(),s.begin(),::tolower);
单词[s]++;
}
for(i=words.begin();i!=words.end();i++)
不能先使用
getline(cin,s,'\n')

使用
getline(cin,s,'\n')


如果您想计算总行数,那么它非常简单:

 size_t countLine = 0;
 while(std::getline(std::cin, s)) countLine++;
但若你们真的想计算同一行的频率,那个么在你们的代码中,替换

string s;

其中,
定义为:

struct line : std::string
{
    friend std::istream & operator >> (std::istream &in, line &ln) 
    {
        return std::getline(in, ln);
    }
};
或者,您可以将其设置为通用:

template<typename CharT, typename Traits = std::char_traits<CharT>, typename Allocator = std::allocator<CharT>>
struct basic_line : public std::basic_string<CharT, Traits, Allocator>
{
    friend std::basic_istream<CharT, Traits> & operator >> (std::basic_istream<CharT, Traits > &in, basic_line<CharT, Traits, Allocator> &ln) 
    {
        return std::getline(in, ln);
    }
};
模板
结构基本行:公共标准::基本字符串
{
friend std::basic_istream&operator>>(std::basic_istream&in,basic_line&ln)
{
返回std::getline(in,ln);
}
};
然后定义这些typedef:

typedef basic_line<char>    line;
typedef basic_line<wchar_t> wline;
typedef基本行;
typedef基本行;

如果要计算总行数,那么非常简单:

 size_t countLine = 0;
 while(std::getline(std::cin, s)) countLine++;
但若你们真的想计算同一行的频率,那个么在你们的代码中,替换

string s;

其中,
定义为:

struct line : std::string
{
    friend std::istream & operator >> (std::istream &in, line &ln) 
    {
        return std::getline(in, ln);
    }
};
或者,您可以将其设置为通用:

template<typename CharT, typename Traits = std::char_traits<CharT>, typename Allocator = std::allocator<CharT>>
struct basic_line : public std::basic_string<CharT, Traits, Allocator>
{
    friend std::basic_istream<CharT, Traits> & operator >> (std::basic_istream<CharT, Traits > &in, basic_line<CharT, Traits, Allocator> &ln) 
    {
        return std::getline(in, ln);
    }
};
模板
结构基本行:公共标准::基本字符串
{
friend std::basic_istream&operator>>(std::basic_istream&in,basic_line&ln)
{
返回std::getline(in,ln);
}
};
然后定义这些typedef:

typedef basic_line<char>    line;
typedef basic_line<wchar_t> wline;
typedef基本行;
typedef基本行;

so,它将是:while(getline(cin,s,'\n'))?那么,它将是:while(getline(cin,s,'\n'))?我的答案中有一些拼写错误,我现在已经纠正了。我的答案中有一些拼写错误,我现在已经纠正了。