单词计数 soj1076

简介:

    BlueEyes' Problem

The Problem

袁源在学英语的时候遇到了一个难题。当他看到一个单词的时候,他不知道这个词他以前是否背过。(这种事也常发生在其他人身上)。为了解决这个问题,他想在读某篇文章之前,先统计这篇文章中每个单词出现的次数。如果是你,你会怎么实现'统计'这个过程呢?

输入

本题只有一组数据.输入为一篇不换行的英语文章(包括各种常用符号,长度小于10000个字母).'单词'在这里定义为只包含52个大小写字母的连续字符串(大写和小写是不同的字母,每个单词的长度不超过100,整个文章总共的单词数不超过1000个,如I'll是两个单词:'I'和'll').符号'@'标志文章的结束.

输出

输出每行包括一个单词本身以及它在文章中出现的次数,中间用一个空格隔开.单词按出现的先后顺序排列.

样例输入

Sometimes I do things I want to do,the rest of time I do things I have to.@

样例输出

Sometimes 1
I 4
do 3
things 2
want 1
to 2
the 1
rest 1
of 1
time 1
have 1

题意很清楚:给出一个字符串,找出其中所有的单词以及该单词出现的次数。一开始想到用map直接去实现,但是到后面发现输出结果的时候顺序不对,因为map是基于红黑树实现的,在进行插入时就是自动按照键值进行自增排序的,因此后来换用结构体实现。

 

复制代码
#include<iostream>
#include<string>
#include<ctype.h>
#include<algorithm>
usingnamespace std;

typedef struct node
{
    string word;
    int times;
}Node;

Node t[1010];
int num=0;

int Search(string str) //查找该单词是否已经出现过
{
    int i;
    for(i=0;i<num;i++)
    {
        if(t[i].word==str)
            return i;
    }
    return i;
}

int main(void)
{
    int i=0,j=0,k;
    string s;
    char ch;
    while((ch=getchar())!='@')
    {
        s+=ch;
    }
    while(i<s.length())
    {
        string temp;
        if(isalpha(s[i]))
        {
            j=i;
            while(isalpha(s[j])&&j<s.length())
            {
                temp+=s[j];
                j++;
            }
            k=Search(temp);
            if(k==num) //如果该单词没有出现过
            {
                t[num].word=temp;
                t[num].times=1;
                num++;
            }
            else
            {
                t[k].times++;
            }
            i=j;
        }
        else
        {
            i++;
        }
    }
    for(i=0;i<num;i++)
    {
        cout<<t[i].word<<""<<t[i].times<<endl;
    }
    return0;
}
复制代码

 

 

 本文转载自海 子博客园博客,原文链接:http://www.cnblogs.com/dolphin0520/archive/2011/04/16/2018336.html如需转载自行联系原作者

相关文章
|
1月前
|
自然语言处理 Python
Python实现词频统计
Python实现词频统计
|
9月前
分别举例什么情况要使用 combiner,什么情况不使用?
分别举例什么情况要使用 combiner,什么情况不使用?
83 0
|
11月前
编写代码实现:单词计数。对文档中的单词计数(注意:不包括符号),并把单词计数超过3的结果进行保存。
编写代码实现:单词计数。对文档中的单词计数(注意:不包括符号),并把单词计数超过3的结果进行保存。
|
11月前
|
分布式计算 算法 Ubuntu
在RDD上执行描述性统计操作
在RDD上执行描述性统计操作
|
分布式计算 Hadoop
mapreduce单词统计
mapreduce单词统计
|
分布式计算 Java Hadoop
Java实现单词计数MapReduce
本文分享实现单词计数MapReduce的方法
301 0
|
资源调度 分布式计算 Java
MapReduce入门例子之WordCount单词计数
MapReduce入门例子之WordCount单词计数
132 0
MapReduce入门例子之WordCount单词计数
|
缓存 分布式计算 Hadoop
利用采样器实现mapreduce任务输出全排序
采样器是hadoop内自带的一个可以对目标文件部分数据进行提取的工具类,以方便我们对这些采样的数据做一些参考或者处理。hadoop提供了多种采样器供我们使用,以满足不同的需求。另外,采样器不同于普通mapreduce操作。
1092 0