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

用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 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)