统计单词数 【map 简单应用】

统计单词数

时间限制: 1Sec 内存限制: 128MB 提交: 464 解决: 188

题目描述

统计输入英文文章段落中不同单词(单词有大小写之分,  但统计时忽略大小写)各自出现的次数。  输入段落中所含单词的总数不超过100,最长单词的长度不超过20个字母. 

输入

一个包含若干句子的段落,  每个句子由若干英文单词组成.  除空格,  逗号和句号外,  这些输入的句子中不含其他非字母字符,  并且,  逗号和句号紧跟在它前面的英文单词后面,  中间没有空格.  段落最后一个字符是回车符,  表示输入结束. 

输出

若段落中共有M个不同的英文单词,则按照其在段落中出现的先后顺序输出M行,各行的格式为:  单词中所有字母均用大写形式输出(最长的单词顶格输出,它前面没有多余的空格;  其余单词与其右对齐)+冒号+N个*号+该单词在段落中的出现次数N 

样例输入

This  is  a  test.  This  test  is  easy.  This  is  a  test.  This  test  is  easy. 

样例输出

THIS:****4
  IS:****4
   A:**2
TEST:****4
EASY:**2

题解:感觉很简单地一个题,让自己写的乱七八糟的,保证好单词的顺序以及判断单词个数就可以。

扫描二维码关注公众号,回复: 11853116 查看本文章

这里我设置了一个 f 来确保没有空格(感觉很憨)。然后用 map 来存一下,之前一直想错问题,还改成了 unordered 的。

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

char s[50000];
string ss[5000];
int main()
{
    gets(s);
//    printf("%s",s);
    unordered_map<string,int>mp;
    mp.clear();
    int len = strlen(s);
    string st = "";
    int maxlen = 0;
    int f = 0;
    int top = 0;
    for(int i = 0; i < len; i ++)
    {
        if(s[i] >='a' && s[i]<='z')
        {
            s[i] = s[i] -'a' + 'A';
        }
        if(s[i] >= 'A' && s[i] <= 'Z' && f == 0)
        {
            st += s[i];
            f = 1;
        }
        else if(s[i] >= 'A' && s[i] <= 'Z' && f == 1)
        {
            st += s[i];
        }
        else if(f == 1)
        {
            mp[st] ++;
//            cout << st <<" ---"<<mp[st] <<endl;
            int tlen = st.length();
            f = 0;
            maxlen = max(tlen,maxlen);
            if(mp[st] == 1) ss[top++]= st;
            st = "";

        }
    }
    unordered_map<string,int> :: iterator it;
    for (int i = 0; i < top; i ++)
    {

        int tlen = ss[i].length();
        int x = maxlen - tlen;
        while(x--)
        {
            printf(" ");
        }

        cout << ss[i] << ":";
        int ii = 0;
        while(ii < mp[ss[i]])
        {
            printf("*");
            ii ++;
        }
        cout << mp[ss[i]] <<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Mercury_Lc/article/details/106479954