51nodPL1单词统计

51nodPL1单词统计
小明正在阅读一篇英语短文。为了方便学习生词,他希望能够找到每个不同单词与其在文中出现的次数,然后他觉得工作量太大了,你能用程序帮他完成吗?已知这篇文章总的单词数为n,单词忽略大小写,即:dad, DAD, Dad 算同一个单词。

输入
第一行输入一个数n,表示这篇文章总的单词数,其中 n<=100000。
第二行输入一个由'a-z','A-Z'以及空格组成的字符串,表示这篇文章,其中每个单词长度<=10。
输出
第一行输出一个正整数m,表示文中不同单词的数量;
之后按照字典序输出m行,每行一个字符串和一个数字以空格隔开,其中字符串仅由'a-z'的小写字母组成,表示这个单词;数字表示文中这个单词出现的次数。
数据范围
对于100%的数据,n<=100000,每个单词长度<=20。
输入样例
18
You better lose yourself in the music the moment You own it you better never let it go
输出样例
13
better 2
go 1
in 1
it 2
let 1
lose 1
moment 1
music 1
never 1
own 1
the 2
you 3
youself 1

脑子实在想不出来了,能帮忙解一下题嘛?(解题思路就可以了)

定义一个单词数组,以及一个单词数量数组。对于每个输入的单词,在单词数组中检索是否已经存在,存在则对应数量加1,不存在则加入数组。

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char **words,word[11];
    int *num;
    int n,i,m=0,j=0,t;
    cin>>n;
    words = new char *[n];
    num = new int[n];
    memset(num,0,n*sizeof(int));
    for(i=0;i<n;i++)
    {
        words[i] = new char[11];
        memset(words[i],0,11);
    }
    for(i=0;i<n;i++)
    {
        cin>>word;
        j=0;
        while(word[j] != 0)
        {
            if(word[j] >= 'A' && word[j]<='Z')
                word[j] += 32;
            j++;
        }
        for(j=0;j<m;j++)
            if(strcmp(word,words[j]) == 0)
                break;
        if(j==m) //新单词
        {
            strcpy(words[m],word);
            num[m] = 1;
            m++;
        }
        else
            num[j]++;
    }
    //排序
    for(i=0;i<m-1;i++)
    {
        for(j=0;j<m-i-1;j++)
        {
            if(strcmp(words[j], words[j+1]) > 0)
            {
                t = num[j];
                num[j] = num[j+1];
                num[j+1] = t;
                strcpy(word,words[j]);
                strcpy(words[j],words[j+1]);
                strcpy(words[j+1],word);
            }
        }
    }
    //
    cout<<m<<endl;
    for(i=0;i<m;i++)
        cout<<words[i]<<" "<<num[i]<<endl;
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632