C++小程序,高分找高手帮忙写,跪求。

需求如下:a.txt中,有如下数据:AB20C4G0171120131212AB20C4G0172020131213AB20C4G0116120131121AB20C4G... 需求如下:
a.txt中,有如下数据:
AB20C4G01711 20131212
AB20C4G01720 20131213
AB20C4G01161 20131121
AB20C4G01170 20131010
AB20BB100031 20131111
AB20BB100040 20131020
AB20C4G01701 20131101
AB20C4G01710 20131202
AB20C4G01051 20130113
AB20C5G01060 20131010
输入:
AB20C4G01051
AB20C5G0100X
读取输入的数据,对比a文件中的数据,如果相匹配,则,输出该数据所在的行的所有信息,如果不完全匹配,则匹配数据前8位,再次比对。将匹配的数据输出到b.txt
例如上面例子结果应该是:
全匹配:AB20C4G01051 20130113
前8位匹配:AB20C5G01060 20131010

程序要完整哈,也希望有注释,vc2005能运行哈。看了半天的书,还是不知道写,只得求助大家帮忙,谢啦,如有热心大哥完满解决,满分加分奉上。
另外问一句,如果a.txt中这样的数据有上万条,我一次性输入查找有二三十条,这样是不是运行起来会很慢?
展开
 我来答
lishimin1972
2014-02-11 · TA获得超过741个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:454万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(const char *text, const char *match, const char *result)
{
    char buf[512];
    char word[512];
    char head[512];
    int fullmatch;
    FILE *mf, *tf, *rf;
    mf=fopen(match,"r");
    if (mf==NULL) return;
    tf=fopen(text,"r");
    if (tf==NULL) return;
    rf=fopen(result,"w");
    if (rf==NULL) return;
    while(1)
    {
        if (NULL==fgets(buf, 500, mf)) break;
        if (1!=sscanf(buf,"%s",word)) continue;
        //word就是要匹配的词
        fullmatch=0;
        fprintf(rf,"\n======== 全8位匹配 %s ==========\n", word);
        while(1)
        {
            if (NULL==fgets(buf, 500, tf)) break;
            if (1!=sscanf(buf,"%s", head)) continue;
            //head就是当前行的词首
            if (strcmp(word, head)==0) //匹配
            {
                fprintf(rf,"%s",buf);
                fullmatch=1;
            }
        }
        rewind(tf);
        if (fullmatch==1) continue;
        fullmatch=0;
        fprintf(rf,"\n======== 前8位匹配 %s ==========\n", word);
        while(1)
        {
            if (NULL==fgets(buf, 500, tf)) break;
            if (1!=sscanf(buf,"%s", head)) continue;
            //head就是当前行的词首
            if (strncmp(word, head, 8)==0) //匹配
            {
                fprintf(rf,"%s",buf);
            }
        }
        rewind(tf);
    }
    fclose(tf);
    fclose(rf);
    fclose(mf);
}
void main(int argn, char *argv[])
{
    if (argn<4)
    {
        printf("用法:match 数据文件名 匹配文件名 结果文件名\n");
        return;
    }
    fun(argv[1],argv[2],argv[3]);
}
/*
数据文件举例:
AB20C4G01711 20131212
AB20C4G01720 20131213
AB20C4G01161 20131121
AB20C4G01170 20131010
AB20BB100031 20131111
AB20BB100040 20131020
AB20C4G01701 20131101
AB20C4G01710 20131202
AB20C4G01051 20130113
AB20C5G01060 20131010
......
匹配文件举例:
AB20C4G01051
AB20C5G0100X
....
结果文件:
======== 全8位匹配 AB20C4G01051 ==========
AB20C4G01051 20130113
======== 全8位匹配 AB20C5G0100X ==========
======== 前8位匹配 AB20C5G0100X ==========
AB20C5G01060 20131010
*/
更多追问追答
追问
请问,指定我的文件位置,语句该改哪里呀?比如读取c\\text.txt
追答
编译了以后执行,假定match.exe是编译后的程序名,在cmd窗口执行之。
用法:match 数据文件名 匹配文件名 结果文件名
在命令行加上三个文件名即可。
如:你指定的数据文件是: c:\text.txt
输出文件是: c:\r.txt
匹配列表文件是: c:\list.txt
那么运行: match c:\text.txt c:\list.txt c:\r.txt
然后打开r.txt, 里面就是你要的结果。
liujiahi
2014-02-11 · TA获得超过1002个赞
知道小有建树答主
回答量:621
采纳率:66%
帮助的人:423万
展开全部
我帮你写个吧,上万条数据是很小的数据量哦,20分钟吧,稍等
更多追问追答
追问
跪谢大哥。。
追答
不好意思,迟到了会儿,上班中,刚才有点小事耽误了下
先给一个,你试试,第二个数据会输出不止一个结果到文件中哦,你看看前8个字符。
字数超限...
我hi你吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suiyue_2009
2014-02-11 · TA获得超过846个赞
知道小有建树答主
回答量:1248
采纳率:0%
帮助的人:885万
展开全部
对于练习来说,这程序不算小了
更多追问追答
追问
没办法,bt的老师出的题目,说是根据他以前的上班经验出的实践题。。泪奔。。果然是很复杂呀。。看上去挺简单的,后来我慢慢分析,发现这货还真不容易。。
追答
你慢慢的弄吧,就几个判断+读写文件+搜索  呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友54c420c5481
2014-02-15 · TA获得超过388个赞
知道小有建树答主
回答量:2888
采纳率:0%
帮助的人:1018万
展开全部
怕贴了,楼主不给分那不是白贴,这还是有点难度的
追问
要分还不容易,下次我出分你再帮我改改?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式