当前位置:软件学习 > Word >>

Hoj 1307 Choose Your Words Carefully、Hoj 1989 The Most Frequent Word

本题虽然是水题,但是我还是比较喜欢做的,能锻炼思维,比较类似于编译原理的词法分析。
题意是要统计一段文章出现频率最高的单词。用map<string,int>统计即可。
另外题目要求按照字典序排列,但是好像Map已经有这个功能了,所以就不写了。
[cpp]  
#include <iostream>  
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <math.h>  
#include <algorithm>  
#include <stack>  
#include <queue>  
#include <map>  
using namespace std;  
  
  
int main()  
{  
#ifndef ONLINE_JUDGE  
    freopen("in.txt","r",stdin);  
#endif  
    char word[122];  
    string a;  
    map<string,int> m;  
    int max = 1;  
    while(scanf(" %s",word)!=EOF)  
    {  
        a.clear();  
        int flag = 0;  
  
        for(int i=0; i<strlen(word); i++)  
        {  
            if(isalpha(word[i]) || (word[i]>='0' && word[i]<='9'))  
            {  
                flag = 1;  
                if(word[i]>='A' && word[i]<='Z')  
                {  
                    word[i] += 32;  
                }  
                a.push_back(word[i]);  
            }  
            else if(flag == 1)  
            {  
                if(m.find(a) == m.end())  
                {  
                    m.insert(make_pair(a,1));  
                }  
                else  
                {  
                    m[a]++;  
                    if(m[a]>max)  
                    {  
                        max = m[a];  
                    }  
                }  
                a.clear();  
                flag = 0;  
            }  
        }  
        if(flag == 1)  
        {  
            if(m.find(a) == m.end())  
            {  
                m.insert(make_pair(a,1));  
            }  
            else  
            {  
                m[a]++;  
                if(m[a]>max)  
                {  
                    max = m[a];  
                }  
            }  
        }  
    }  
    printf("%d occurrences\n",max);  
    for(map<string,int>::iterator i = m.begin();i!=m.end();i++)  
    {  
        if(i->second == max)  
        {  
            printf("%s\n",i->first.c_str());  
        }  
    }  
    return 0;  
}  
 
 
与上题一样,我直接用上题的代码A掉。
[cpp]  
#include <iostream>  
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <math.h>  
#include <algorithm>  
#include <stack>  
#include <queue>  
#include <map>  
using namespace std;  
  
  
int main()  
{  
#ifndef ONLINE_JUDGE  
    freopen("in.txt","r",stdin);  
#endif  
    char word[122];  
    string a;  
    map<string,int> m;  
    int max = 1;  
    while(scanf(" %s",word)!=EOF && strcmp(word,"#")!=0)  
    {  
        a.clear();  
        int flag = 0;  
  
        for(int i=0; i<strlen(word); i++)  
        {  
            if(isalpha(word[i]) || (word[i]>='0' && word[i]<='9'))  
            {  
                flag = 1;  
                if(word[i]>='A' && word[i]<='Z')  
                {  
                    word[i] += 32;  
                }  
                a.push_back(word[i]);  
            }  
            else if(flag == 1)  
            {  
                if(m.find(a) == m.end()) &
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,