C++实现统计所需字符数量功能

由于公司需要筛选文章中的关键字,文章很多关键字也很多,一遍一遍的用Ctrl + f 很麻烦,拜托大神写了个简单的程序,自己根据需求改了改,贴在这里做个备份

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <vector>
#include <map>
#include <fstream>

using namespace std;

int AcompareB(char *a, string b)
{
    for(int i = 0; i < b.length(); i ++)
    {
        if(a[i] != b[i])
        {
            return 1;
        }
    }
    return  0;
}

int main()
{
    ifstream fin;
    ofstream fout;
    vector<string> KeyWord;
    map<string, int> KeyWordNum;
    int maxLength = 0;
    char *hWords;
    char *isBeUsed;

    fout.open("D:\\output.txt", ios::out);
    fin.open("D:\\input.txt", ios::in);

    string temKeyWord;
    while(fin >> temKeyWord)
    {
        KeyWord.push_back(temKeyWord);
        KeyWordNum[temKeyWord] = 0;

        if(temKeyWord.length() > maxLength)
        {
            maxLength = temKeyWord.length();
        }
    }

    fin.close();

    hWords = new char[KeyWord.size()];
    isBeUsed = new char[maxLength];
    for(int i = 0; i < KeyWord.size(); i ++)
    {
        hWords[i] = KeyWord[i][0];
    }

    fin.open("D:\\text.txt", ios::in);

    while(fin.peek()!=EOF)
    {
        int spacenum = 0;
        memset(isBeUsed, 0, maxLength);
        char word = fin.get();
        if(word == ' ' || word == '\n')
        {
            continue;
        }



        int temSign = 0;
        for(int i = 0; i < KeyWord.size(); i ++)
        {
            if(word == hWords[i])
            {
                temSign = 1;
                break;
            }
        }

        if(temSign == 1)
        {
            isBeUsed[0] =word;
            int cnt = 0;
            for(int i = 1; i < maxLength; i ++)
            {
                if(fin.peek()== EOF)
                {
                    break;
                }
                char th = fin.get();
                if(th == ' '|| th == '\n')
                {
                    spacenum += 1;
                    i --;
                    continue;
                }
                cnt ++;
                isBeUsed[i] = th;

            }
            for(int i = 0; i < KeyWord.size(); i ++)
            {
                if(AcompareB(isBeUsed, KeyWord[i]) == 0)
                {
                    KeyWordNum[KeyWord[i]]++;
                }
            }
            fin.seekg(-cnt - spacenum ,ios::cur);
        }


    }

    map<string,int>::iterator it;
    for(it = KeyWordNum.begin(); it != KeyWordNum.end(); it ++)
    {
        fout << it->first << " " << it->second << endl;
    }

    fout.close();
    fin.close();

    return 0;
}

有需要的同学可以根据自己的需求改一改

猜你喜欢

转载自blog.csdn.net/weixin_42342572/article/details/80568090