CaoLuffy 2022-01-11 19:18 采纳率: 60%
浏览 87
已结题

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

  • 写回答

2条回答 默认 最新

  • 熬夜的Alan Walker 2022-02-07 21:22
    关注
    
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月23日
  • 已采纳回答 2月15日
  • 创建了问题 1月11日

悬赏问题

  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP