IT农夫.z 2019-06-09 13:12 采纳率: 0%
浏览 466

用c++中STL实现对于TXT文件中的文字进行提取,并按照词频输出到TXT文件中

用stl将TXT文件中的文字提取出来,然后利用再把这些文字按照词频排序,
最后把它们输出到另外一个TXT文件中。
自己完成了一部分,希望有个大神能看懂我的思路,帮忙完成一下程序。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct T_WORD
{
    string strWord;
    int freq;
}MyWord;
class Fileprocess
{
private:
    vector<MyWord>m_vector;
    string strfilesrc;
    string strfiledst;
public:
    Fileprocess(string src, string dst);
    void P();
    void PushVector(string str);
    void WriteF();
    void Split(char*p, char*pword);
};
#include "Fileprocess.h"
Fileprocess::Fileprocess(string src, string dst)
{
    strfilesrc = src;
    strfiledst = dst;
}
void Fileprocess::P()
{
    FILE*fp = fopen(strfilesrc.c_str(), "r");
    char szbuf[50] = { '\0' };
    char szbuf1[50] = { '\0' };
    string str;
    while (!feof(fp))
    {
        memset(szbuf, '/0', 50);
        memset(szbuf1, '/0', 50);
        //fscanf(fp, "%s", szbuf);
        cout << szbuf;
        Split(szbuf, szbuf1);
        str = szbuf1;
        PushVector(str);
    }
    fclose(fp);
}


void Fileprocess::PushVector(string str)
{
    bool flag = false;
    vector<MyWord>::iterator iter;
    MyWord myword;
    for (iter = m_vector.begin(); iter != m_vector.end(); iter++)
    {
        myword = (MyWord)*iter;
        if (myword.strWord == str)
        {
            myword.freq++;
            *iter = (MyWord)myword;
            flag = true;
        }
    }
    if (flag == false)
    {
        myword.strWord = str;
        myword.freq = 1;
        m_vector.push_back(myword);
    }

}


void Fileprocess::WriteF()
{
    FILE*fw = fopen(strfiledst.c_str(), "w");
    vector<MyWord>::iterator iter;
    MyWord myword;
    for (iter = m_vector.begin(); iter != m_vector.end(); iter++)
    {
        myword = (MyWord)*iter;
        fprintf(fw, "%s &d\n", myword.strWord.c_str(), myword.freq);
    }
    fclose(fw);
}


void Fileprocess::Split(char*p, char*pword)
{
    char *pstr;
    char q = NULL;
    q = strchr(pstr, '/');
    if (q == NULL)
        return;
    pstr = p;
    *p = '\0';
    strcpy(pword, pstr);
}
#include "Fileprocess.h"
#include <iostream>
using namespace std;

int main()
{
    string filesrc = "d:\\vs2017\\199802.txt";
    string filedst = "d:\\vs2017\\result.txt";
    Fileprocess fileprocess(filesrc, filedst);
    fileprocess.P();
    fileprocess.WriteF();
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-09 15:14
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?