hello,c++ 2022-01-19 20:04 采纳率: 60%
浏览 42
已结题

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

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

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-01-19 20:21
    关注

    定义一个单词数组,以及一个单词数量数组。对于每个输入的单词,在单词数组中检索是否已经存在,存在则对应数量加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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 1月19日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装