码迷,mamicode.com
首页 > 其他好文 > 详细

改了一下代码,实现了所有的功能

时间:2017-09-24 17:22:03      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:data   ota   set   out   最好   string   strcmp   cto   getch   

#include <iostream>
#include <cstdio>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <cctype>
#include <cstring>
#include <io.h>
#include <algorithm>
#include <utility>
#include <iomanip>
using namespace std;
typedef pair<string, int> PAIR;
struct CmpByValue {
  bool operator()(const PAIR& lhs, const PAIR& rhs) {
    return lhs.second > rhs.second;
  }
};
void console_get_name();
void display_map(map<string,int> &wmap);
void file_get_map(string Arg);
void file_txt_get_map(char* A);
void console_get_single();
void file_info_get_map(char* fileinfo);
void one_backslash_become_two_backslash(char* Path);
int main(int argc ,char** argv)
{ios::sync_with_stdio(false);
    if(argc==1)
        console_get_single();
    if(argc==3)
    {
        string arg=argv[2];
        file_get_map(arg);
    }
    char a[200]="",b[20]="*.txt",c[20]="\\",d[20]="-s";
    if(strcmp(d,argv[1])==0)
    {
        console_get_single();
        return 0;
    }
    char buf[80];
    getcwd(buf,sizeof(buf));
    strcat(a,buf);
    strcat(a,c);
    strcat(a,argv[1]);
    strcat(a,c);
    strcat(a,b);
    //printf("%s\n",argv[0]);
    one_backslash_become_two_backslash(a);
    // strcat(a,b);
    //printf("%s\n",a);
    long Handle;
    struct _finddata_t FileInfo;
    if((Handle=_findfirst(a,&FileInfo))==-1L)
    {
        char aa[200];
        strcpy(aa,argv[1]);
        file_txt_get_map(aa);
    }
    else
    {

        file_info_get_map(FileInfo.name);
        while(_findnext(Handle,&FileInfo)==0)
            file_info_get_map(FileInfo.name);
        _findclose(Handle);
    }

    //  get_map();

    return 0;
}

void display_map(map<string,int> &wmap)
{
    map<string,int>::const_iterator map_it;
    int tot=0;
    for(map_it=wmap.begin(); map_it != wmap.end(); map_it ++)
        tot++;
    cout<<"total "<<tot<<endl;
   // for(map_it=wmap.begin(); map_it != wmap.end(); map_it ++)
  //  {
   //     cout << map_it->first <<" "<< map_it->second  << endl;
   // }
    vector<PAIR> name_number_vec(wmap.begin(), wmap.end());
  sort(name_number_vec.begin(), name_number_vec.end(), CmpByValue());
 // sort(name_score_vec.begin(), name_score_vec.end(), cmp_by_value);
  for (int i = 0; i != name_number_vec.size(); ++i) {
        if(i>9)
        break;
    cout <<setw(10)<<name_number_vec[i].first<<setw(6)<<name_number_vec[i].second<< endl;
  }


}
void file_txt_get_map(char* A)
{
    string filename;
    filename=A;
    //cin.get();
    filename+=".txt";
    ifstream fin(filename.c_str());                    //  read  in  str[]
    string  temp;
    map<string,int> wmap;
    while(fin>>temp)
    {
        int len=temp.size();
        char tmp[20]="";
        int j=0;
        for(int i=0; i<len; i++)
        {
            if (isalpha(temp[i]))
            {
                tmp[j]=temp[i];
                j++;
            }

        }
        string tmp2(tmp);
        wmap[tmp2]++;
    }
    display_map(wmap);
    fin.close();
    //cin.get();
}
void file_get_map(string Arg)
{
    string filename;
    filename=Arg;
    // cin.get();
    ifstream fin(filename.c_str());                    //  read  in  str[]
    string  temp;
    map<string,int> wmap;
    while(fin>>temp)
    {
        int len=temp.size();
        char tmp[20]="";
        int j=0;
        for(int i=0; i<len; i++)
        {
            if (isalpha(temp[i]))
            {
                tmp[j]=temp[i];
                j++;
            }

        }
        string tmp2(tmp);
        wmap[tmp2]++;
    }
    display_map(wmap);
    fin.close();
    //cin.get();
}
void console_get_single()
{
    string  temp;
    map<string,int> wmap;
    while(cin>>temp)
    {

        int len=temp.size();
        char tmp[20]="";
        int j=0;
        for(int i=0; i<len; i++)
        {
            if (isalpha(temp[i]))
            {
                tmp[j]=temp[i];
                j++;
            }

        }
        string tmp2(tmp);
        wmap[tmp2]++;
        if (getchar()==\n)
            break;
    }
    display_map(wmap);
    //cin.get();
}
/*void console_get_name()
{
    string filename;
    cin>>filename;
    //cin.get();
    filename+=".txt";
    ifstream fin(filename.c_str());                    //  read  in  str[]
    string  temp;
    map<string,int> wmap;
    while(fin>>temp)
    {
        int len=temp.size();
        char tmp[20]="";
        int j=0;
        for(int i=0; i<len; i++)
        {
            if (isalpha(temp[i]))
            {
                tmp[j]=temp[i];
                j++;
            }

        }
        string tmp2(tmp);
        wmap[tmp2]++;
    }
    display_map(wmap);
    fin.close();
   // cin.get();
}*/
void one_backslash_become_two_backslash(char* Path)
{
    int len=strlen(Path);
    char Path2[100];
    for(int i=0,j=0; i<len; i++)
    {
        if(Path[i]==\\)
        {
            Path2[j++]=\\;
            Path2[j++]=\\;
        }
        else Path2[j++]=Path[i];
    }
    strcpy(Path2,Path);
}
void file_info_get_map(char* fileinfo)
{
    string filename=fileinfo;
    // cin >> filename;
    //  cin.get();
    ifstream fin(filename.c_str());                    //  read  in  str[]
    string  temp;
    map<string,int> wmap;
    while(fin>>temp)
    {
        int len=temp.size();
        char tmp[20]="";
        int j=0;
        for(int i=0; i<len; i++)
        {
            if (isalpha(temp[i]))
            {
                tmp[j]=temp[i];
                j++;
            }

        }
        string tmp2(tmp);
        wmap[tmp2]++;
    }
    display_map(wmap);
    fin.close();
//   cin.get();
}

排序输出前十个怎么实现:把map里面的拿到vecror里,vector可以sort,参考了链接http://blog.csdn.net/iicy266/article/details/11906189

输出格式控制怎么实现:cout可以setw(x),其中x是你想要的宽度。例:

cout <<setw(10)<<name_number_vec[i].first<<setw(6)<<name_number_vec[i].second<< endl;

单词设成宽度10了,因为:尽管有长度比10个字母长的单词,不过出现频率最高的单词不太可能是它们。

数字设成6,因为五位数已经挺大了,可以表示到99999。

本来可以早一些完成,拿一个很高的分,不过当时懒了,懒了就是懒了。就像上周到的哑铃和球过了这么久也只玩了一次一样。种下一棵树最好的时间是十年前,其次是今天。

让我们开始种大树吧!

改了一下代码,实现了所有的功能

标签:data   ota   set   out   最好   string   strcmp   cto   getch   

原文地址:http://www.cnblogs.com/gaoyb348/p/7587544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!