51nod PL1 测试 C 单词统计

谁能帮一下,真是想不出来了?
c++

小明正在阅读一篇英语短文。为了方便学习生词,他希望能够找到每个不同单词与其在文中出现的次数,然后他觉得工作量太大了,你能用程序帮他完成吗?已知这篇文章总的单词数为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


#include<bits/stdc++.h>
using namespace std;
char **words, word[11];
int *num;
int n, i, m = 0, j = 0, t;
int main()
{
    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;
}

img

img

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