东华oj面向对象统计单词

18 统计单词

作者: Turbo时间限制: 1S章节: STL库

问题描述 :

实验目的:string、vector、类的综合应用。

实验内容:

从键盘输入一篇文章,统计其中单词出现的次数(不区分大小写),并输出出现次数排名第一的单词及其次数。注意:可能有多个单词并列第一,需要全部输出。输出时,如果有多个单词排名并列,则按其在文章中出现的先后顺序输出,先出现的先输出。

说明:为简单起见,单词的含义是空白字符分隔开的连续字符串。比如“I love China!”这句话包含三个单词,第三个单词是“China!”(包括其中的感叹号),再如“Hi !”,这句话包含两个单词,第二个单词仅为一个感叹号。

参考以下main函数:

int main()

{

    vector<WordCount> vwc;

    string str;

     int i;



     while(cin>>str)

     {

         str = ToLower(str);

         CountWord(vwc, str);

     }

     DisplayResult(vwc);



     return 0;

}

其中:

WordCount类:存储单词及其出现次数

ToLower函数:传入一个字符串,将其中大写英文字母转换为小写、其余字符保持不变,返回转换后的结果。

CountWord函数:传入一个vector和一个单词,在vector中查找该单词是否已存在(注意:vector中的元素为WordCount对象,该对象有一个属性为单词字符串),如果已存在,则将其出现次数加1,否则在vector中添加一个元素(WordCount对象),该元素存储这个新的单词及其出现次数(此时为1)。

DisplayResult函数:传入一个vector,输出其中出现次数最高的单词及其次数。

请实现以上定义的WordCount类及三个函数。

输入说明 :

输入一篇文章,其中包含可见字符及空白字符(可能有换行)。

输出说明 :

每个单词占一行,如果有n个单词,则输出n行,

每行首先输出单词(以小写字母形式输出),然后输出一个空格,再输出单词的出现次数。

单词输出的顺序按照在文章中出现的先后顺序。
输入范例:
abc Abc, ABC.
abc!
abc, def
DEf
输出范例:
abc, 2
def 2

#include<string>
#include<vector>
#include<iostream>
using namespace std;
string ToLower(string &a)
{
    string b;
    char ch;
    for(int i=0;a[i];i++)
    {
        if(a[i]>='A'&&a[i]<='Z')
            ch=a[i]+32;//注意典型错误str[i]+=a[i]+32//
        else ch=a[i];
        b+=ch;
    }
    return b;
}
class WordCount
{
public:
    string a;
    int n;
    WordCount(string b)
    {
        a=b;
        n=1;
    }
};//非static类型变量不能类外初始化也不能类内定义时初始化//
void CountWord(vector<WordCount>&c,string d)//涉及更改stl的必须引用//
{   bool flag=0;
    for(int i=0;i<c.size();i++)
    {
        if(d==c[i].a)
        {
            flag=1;
            c[i].n++;
            break;
        }
    }
    if(!flag)
    {
        WordCount e(d);
        c.push_back(e);//插入就是创建然后pushback//
    }
    return;
}
void DisplayResult(vector<WordCount>&c)
{
    int temp=-1;
    for(int i=0;i<c.size();i++)
    {
        if(c[i].n>temp)
            temp=c[i].n;
    }
    for(int i=0;i<c.size();i++)
    {
        if(temp==c[i].n)
            cout<<c[i].a<<" "<<temp<<endl;
    }
}
int main()

{

        vector<WordCount> vwc;

        string str;

         int i;



         while(cin>>str)

         {
                if(str=="000")//便于测试//
                    break;
             str = ToLower(str);

             CountWord(vwc, str);

         }

         DisplayResult(vwc);
         return 0;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值