再来发一个字符串处理有关问题

再来发一个字符串处理问题
小学期老师要做MFC作业,要弄一个彩票系统,于是我复制粘贴了一份文本文件,格式超乱,我准备只读取出期号和中奖号码,下面这是文本文档格式
期号	开奖时间	开奖号码	销售金额	最新奖池	一等奖	二等奖	三等奖	详情
注数 中奖(元) 注数 中奖(元) 注数 中奖(元)
2014099 2014-08-28
01 05 10 11 13 32 14
0 0 0 0 0 0 0 0 开奖信息
2014098 2014-08-26
02 13 17 20 29 31 07
353,151,800 392,834,215 5 8,502,424 77 284,287 1534 3,000 开奖信息
2014097 2014-08-24
07 13 24 25 27 32 15
390,727,104 369,675,882 3 10,000,000 148 196,578 1599 3,000 开奖信息

下面是我的C++代码,
#include "stdafx.h"
using namespace std;
int main()
{
ifstream input("save.txt");
if (!input)
{
cout << "Open file failed" << endl;
}
string line;
string date;
vector<string> num(7);
input.sync();
getline(input, line);
getline(input, line);
while (input)
{
input >> date;
input >> line;
for (int i = 0; i < 7; ++i)
{
input >> num[i];
}

getline(input, line);
cout << date << endl;

}
}

不出所料是乱码,我翻到以前一个帖子学着加了一个sync函数,显示正常了许多,不过还是不太对
2014099
0
2014098
353,151,800
2014097
390,727,104
2014096
357,432,576
2014095
348,187,212

期号之间的东西该如何消掉,原理是什么,求解答……再来发一个字符串处理有关问题
------解决方案--------------------
这么晚还来提问,是个好孩子,先赞一个。

你要先明确txt的格式,没有程序能处理不确定的输入格式。你可以规范数据为每一行一个记录。
不过这样的系统为什么不用数据库,这样就不用考虑这些格式问题了,而且处理速度很快。我相信这也是老师考察的一个内容。
推荐使用跨平台的轻量数据库sqlite,数据库操作网上都有现成的代码。
------解决方案--------------------
需要一个拆分函数,把文件一次读取

首先根据'\n'拆分
后面根据'\t'拆分

基本可以解决问题

------解决方案--------------------
引用:
这么晚还来提问,是个好孩子,先赞一个。

你要先明确txt的格式,没有程序能处理不确定的输入格式。你可以规范数据为每一行一个记录。
不过这样的系统为什么不用数据库,这样就不用考虑这些格式问题了,而且处理速度很快。我相信这也是老师考察的一个内容。
推荐使用跨平台的轻量数据库sqlite,数据库操作网上都有现成的代码。


我只冲你第一句话来的,早睡早起才是个好孩子。不管有多大的问题都要准时睡觉。能做到这一点才是好孩子。
别听那些所谓成功人士说的每天2点睡觉那些鬼话。
------解决方案--------------------

void Trim(std::string &strTrim)
{
    string::size_type fPos = strTrim.find_first_not_of(' ');
    string::size_type bPos = strTrim.find_last_not_of(' ');
    string::size_type nPos = strTrim.find_first_of('\n');
    if( nPos != string::npos && nPos <= nPos )
        bPos = nPos - 1; 

    if( fPos > bPos )
    {
        strTrim = "";
        return;
    }

    string strTemp(strTrim.begin() + fPos, strTrim.begin()+bPos+1);
    strTrim = strTemp;
}

int SplitToMultiValue(std::string strValue, std::vector<std::string> &vecValue)
{
    if( strValue.empty() )
        return 0;

    string::size_type pos = strValue.find_first_of(' ');
    if( pos == string::npos )
    {
        vecValue.push_back(strValue);
        return vecValue.size();
    }

    string strFront(strValue.begin(), strValue.begin() + pos);
    string strBehind(strValue.begin() + pos + 1, strValue.end());
    vecValue.push_back(strFront);

    Trim(strBehind);
    return SplitToMultiValue(strBehind, vecValue);
}

int main(int argc, char **argv)
{
    string name = "0.txt";
    FILE *fp = fopen(name.c_str(), "r");
    if( fp == NULL )
        return 0;

    char buf[1024];
    while( !feof(fp) )
    {
        fgets(buf, 1024, fp);
        if( strstr(buf, "2014") != NULL )
        {
            cout<<buf;
            fgets(buf, 1024, fp);
            string strVal(buf);
            Trim(strVal);
            vector<string> vecVal;