前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单词识别

单词识别

作者头像
喜欢ctrl的cxk
发布2019-11-08 15:40:35
1.2K0
发布2019-11-08 15:40:35
举报
文章被收录于专栏:Don的成长史

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/89927887

题目描述:

输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。

输入描述:

代码语言:javascript
复制
输入有若干行,总计不超过1000个字符。

输出描述:

代码语言:javascript
复制
输出格式参见样例。

输入样例:

代码语言:javascript
复制
A blockhouse is a small castle that has four openings through which to shoot.

输出样例:

代码语言:javascript
复制
a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1

解题思路:

我一开始的思路是:先把字符串中的字母全部转换成小写,用map来记录单词出现的次数,利用字符流来进行单词的读入,然后进行无脑输出即可。然而!提交之后有测试点WA啦!因为我没有考虑到标点符号的问题,比如:"This is a dog, and that is also a dog."这个句子。我们预期的输出应该包括"dog:2",然而实际的输出结果是"dog,:1"和"dog.:1"。不要慌!

不要慌问题不大!通过观察可以发现' '、','、'.'这三个字符都标志着一个单词的结束,所以我们可以用一个字符串word来读取单词,然后无脑遍历字符串str,当读到那三个字符时,立即m[word]++;并把word重新置为空,否则将字符添加到word中。

AC代码:WA代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str,word;
    getline(cin,str);
    transform(str.begin(),str.end(),str.begin(),::tolower);   //把字符串全部转换成小写
    stringstream ss;
    ss << str;   //将字符串str存入字符流中
    map<string,int> m;   //map的key为单词,value为这个单词出现的次数
    while(ss >> word)
    {
        m[word]++;
    }
    for(auto it = m.begin(); it != m.end(); it++)
    {
        cout << it->first << ":" << it->second << endl;
    }
    return 0;
}

AC代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str, word = "";
    getline(cin,str);
    transform(str.begin(),str.end(),str.begin(),::tolower);   //把字符串全部转换成小写
    map<string,int> m;   //map的key为单词,value为这个单词出现的次数
    for(auto it : str)
    {
        if(it == ' ' || it == ',' || it == '.')   //标志着一个单词的结束
        {
            if(word != "")
            {
                m[word]++;
            }
            word = "";    //将word置为空,开始记录下一个单词
        }
        else
        {
            word += it;
        }
    }
    for(auto it = m.begin(); it != m.end(); it++)
    {
        cout << it->first << ":" << it->second << endl;
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 输入描述:
    • 输出描述:
      • 输入样例:
        • 输出样例:
          • 解题思路:
            • AC代码:WA代码:
              • AC代码:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档