假如有60个文件, 文件名为:zipin1.txt到zipin60.txt 文件格式(词语是汉字串,词频是数字):

词语 词频
词语 词频
.
.
.

所有文件中的词语包括顺序都是一样的,只是词频不一样, 现在要把所有文件中相同词语的词频加起来以相同的格式写到main.txt文件中。

#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

const int g_line = 64;

class Word
{
public:
    Word(const string srcPath);
    ~Word();
    bool UpdateNum(const string srcPath);
    void Output(const string destPath) const;

private:
    vector<string> m_strName;
    vector<int> m_nNum;
};

Word::Word(const string srcPath)
{
    if (!(srcPath.empty()))
    {
        char szLine[g_line] = {0};
        char *pName = NULL;
        char *pNum = NULL;
        string strTemp;
        ifstream is(srcPath.c_str());
        while (is.getline(szLine, g_line))
        {
            pName = strtok(szLine, "-");
            m_strName.push_back(pName);
            pNum = strtok(NULL, "-");
            m_nNum.push_back(atoi(pNum));
        }
        is.close();
    }
}

Word::~Word()
{
}

bool Word::UpdateNum(const string srcPath)
{    
    if (!(srcPath.empty()))
    {
        char    szLine[g_line] = {0};
        char    *pNum = NULL;
        int        nNum = 0;
        int        i = 0;
        ifstream is(srcPath.c_str());
        while (is.getline(szLine, g_line))
        {
            strtok(szLine, "-");
            pNum = strtok(NULL, "-");
            nNum = atoi(pNum);
            m_nNum.at(i++) += nNum;
        }
        is.close();
    }


    return true;
}

void Word::Output(const string destPath) const
{
    vector<string>::const_iterator itName;
    vector<int>::const_iterator itNum;

    ofstream os(destPath.c_str());
    for (itName = m_strName.begin(), itNum = m_nNum.begin();
        itName != m_strName.end(); ++itName, ++itNum)
    {
        os << *itName << " " << *itNum << endl;
    }
    os.close();
}

int main(void)
{
    DWORD dwStart = ::GetTickCount();

    Word word("zipin1.txt");
    char szPath[_MAX_PATH];
    for (int i = 2; i <= 60; i++)
    {
        memset(szPath, 0, sizeof(szPath));
        sprintf(szPath, "zipin%d.txt", i);
        word.UpdateNum(szPath);
    }
    word.Output("main.txt");


    DWORD dwEnd = ::GetTickCount();
    cout << "elapse time: " << dwEnd - dwStart << endl;

    system("pause");
    return 0;
}

2011-08-15

聊天