| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2869 人关注过本帖
标题:比较两个文件,输出凡是含有相同的字符串。错开行比较。
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

#define MAX 50

int main(void)
{
    char buffer_1[MAX];                              /* 读取文件1          */
    char buffer_2[MAX];                             /* 读取文件2          */
    int count1 = 0;                                /* 记录buffer字符个数 */
    int count2 = 0;
    int row1 = 0;                                 /* 行数             */
    int row2 = 0;
    char mode[100];

    FILE *pfile1 = NULL;                         /* 调用文件的指针   */
    FILE *pfile2 = NULL;
    FILE *pfile3 = NULL;

    char *filename1 = "E:\\才、\\Test\\1.txt";  /* 文件路径        */
    char *filename2 = "E:\\才、\\Test\\2.txt";
    char *filename3 = "E:\\才、\\Test\\3.txt";

    if(!(pfile1 = fopen(filename1, "r")))
    {
        printf("读取文件%s失败\n",filename1);
        return 1;
    }

    if(!(pfile2 = fopen(filename2, "r")))
    {
        printf("读取文件%s失败\n",filename2);
        return 1;
    }

    if(!(pfile3 = fopen(filename3, "w")))
    {
        printf("读取文件%s失败\n");
        return 1;
    }

    sprintf(mode, "相同字符串:\n%%-%ds\n%%-%ds\n文件1行号: %%-4d文件2行号:%%-4d\n\n",
        MAX, MAX);

    for(;;)
    {
      row1++;                                            /* 递增行数 */
      while((buffer_1[count1++] = fgetc(pfile1)) != '\n');
      buffer_1[--count1] = '\0';

      if(feof(pfile1))
          break;

      for(;;)
      {
      row2++;
      count2 = 0;
      while((buffer_2[count2++] = fgetc(pfile2)) != '\n' && buffer_2[count2-1] != EOF );
     
      if(feof(pfile2))
          break;
     
      buffer_2[--count2] = '\0';
      if(strcmp(buffer_1, buffer_2) == 0)
      fprintf(pfile3, mode, buffer_1, buffer_2, row1, row2);
     
      }
      rewind(pfile2);
      count1 = 0;
      row2 = 0;
    }

    fclose(pfile1);
    fclose(pfile2);
    fclose(pfile3);

    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

I have not failed completely
2013-01-02 16:52
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
有个地方有个粗心的错误,这是完善的:
程序代码:
#include <stdio.h>
#include <string.h>

#define MAX 50

int main(void)
{
    char buffer_1[MAX];                              /* 读取文件1          */
    char buffer_2[MAX];                             /* 读取文件2          */
    int count1 = 0;                                /* 记录buffer字符个数 */
    int count2 = 0;
    int row1 = 0;                                 /* 行数             */
    int row2 = 0;
    char mode[300];

    FILE *pfile1 = NULL;                         /* 调用文件的指针   */
    FILE *pfile2 = NULL;
    FILE *pfile3 = NULL;

    char *filename1 = "E:\\才、\\Test\\1.txt";  /* 文件路径        */
    char *filename2 = "E:\\才、\\Test\\2.txt";
    char *filename3 = "E:\\才、\\Test\\3.txt";

    if(!(pfile1 = fopen(filename1, "r")))
    {
        printf("读取文件%s失败\n",filename1);
        return 1;
    }

    if(!(pfile2 = fopen(filename2, "r")))
    {
        printf("读取文件%s失败\n",filename2);
        return 1;
    }

    if(!(pfile3 = fopen(filename3, "w")))
    {
        printf("读取文件%s失败\n");
        return 1;
    }

    sprintf(mode, "相同字符串:\n%%-%ds\n%%-%ds\n文件1行号: %%-4d文件2行号:%%-4d\n\n",
        MAX, MAX);

    for(;;)
    {
      row1++;                                            /* 递增行数 */
      while((buffer_1[count1++] = fgetc(pfile1)) != '\n' && buffer_1[count1-1] != EOF);
    
      if(feof(pfile1))
      {
          printf("\nEnd\n");
          break;
      }

      buffer_1[--count1] = '\0';
      for(;;)
      {
      row2++;
      count2 = 0;
      while((buffer_2[count2++] = fgetc(pfile2)) != '\n' && buffer_2[count2-1] != EOF );
     
      if(feof(pfile2))
          break;
     
      buffer_2[--count2] = '\0';
      if(strcmp(buffer_1, buffer_2) == 0)
      fprintf(pfile3, mode, buffer_1, buffer_2, row1, row2);
     
      }
      rewind(pfile2);
      count1 = 0;
      row2 = 0;
    }

    fclose(pfile1);
    fclose(pfile2);
    fclose(pfile3);
   
    /* 删除功能
    if(remove(filename1) == EOF)
    printf("删除文件%s失败\n",filename1);
    else
    printf("删除成功!\n");

    remove(filename2);
    remove(filename3);
    */

    return 0;
}


 
收到的鲜花
  • a137803932013-01-02 18:27 送鲜花  3朵  

I have not failed completely
2013-01-02 17:15
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 12楼 神龙赖了
非常感谢!!!分给你了。
2013-01-02 18:26
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 12楼 神龙赖了
另,要是把那些汉字和描述它位置的语句去掉,怎么修改。我只需要单个字符就行了。
2013-01-02 18:29
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 12楼 神龙赖了
上个问题,我已自己解决。谢谢!!!
2013-01-02 18:32
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
虽然没听懂你在说神马,但是解决了就好....

I have not failed completely
2013-01-02 18:35
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
哦,我听懂了,不好意思哈,语文不行...

这个很简单,只要你能看懂这个代码就行了
既然做出来了我就不多说了...祝你好运

I have not failed completely
2013-01-02 19:02
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
从前有个工具,它的名字叫TC
呵呵, 开个玩笑, 这个工具不错,推荐一下
楼主可以参考一下

为游戏狂~~!!    大家努力编哈!
2013-01-02 19:06
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 17楼 神龙赖了
新建文件夹.zip (1.75 KB)
你这个程序好像只能比较两个文件具有相同的字符串,我再给你传两个文件。它们当中是有相同字符的,可是输出结果为0.
2013-01-02 20:00
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我下载了
5.txt中的字符串再写完后还有很多的空白符,最后才回车
字符数就多于2.txt中的字符串中的字符了
所以和2.txt的字符比较时自然就会大于,所以为0

I have not failed completely
2013-01-02 20:16
快速回复:比较两个文件,输出凡是含有相同的字符串。错开行比较。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027496 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved