2019C语言课程设计

五,编写一个程序合并两个文件的数据并进行排序
硬盘中存有两个数据文件,data1.txt 和 data2.txt。
文件数据格式如下:item1:value1 item2:value2 item3:value3…item 和 value 均是整数。试编写程序,合并两个文件的数据到一个新文件 data.txt 中。
新文件中的 item 是原有文件的并集,按 item 值升序排序(注意原文件并不排序);新文件中的每个item 对应的 value 值是原文件相应 value 值的和。文件中,每 10 组数据换一行。
下面是一个简单例子
data1.txt1:34 18:23 44:54 198:22 12:23 33:23 134:11
data2.txt18:22 12:11 5:12 6:6 35:12 145:165 20:12 198:28
合并输出文件 data.txt 的内容应该是:
1:34 5:12 6:6 12:34 18:45 20:12 33:23 35:12 44:54 134:11145:165 198:50

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 7
struct date
{
 int item;
 char c;
 int value;
}date1[N], date2[N], date[2 * N];
void main()
{
 FILE *fp1, *fp2;
 if ((fp1 = fopen("D:\\date1.txt", "r")) == NULL)
 {
  printf("无法正常打开\n");
  exit(0);
 }
 int i = 0, j, n = 0;
 while ((fscanf(fp1, "%d %c %d", &date1[i].item, &date1[i].c, &date1[i].value)) != EOF)
  i++;
 if ((fp2 = fopen("D:\\date2.txt", "r")) == NULL)
 {
  printf("无法正常打开\n");
  exit(0);
 }
 i = 0;
 while ((fscanf(fp2, "%d %c %d", &date[i].item, &date[i].c, &date[i].value)) != EOF)
  i++;
 for (i = 0; i < N; i++)
 {
  for (j = 0; j < N + n; j++)
  {
   if (date1[i].item == date[j].item)date[j].value += date1[i].value;
   continue;
  }
  if (j >= N + n)
   date[N - 1 + n] = date1[i];
  n++;
 }
 for (i = 0; i < N + n - 1; i++)
 {
  for (j = 0; j < N - 1 - i; j++)
  {
   if (date[j].item > date[j + 1].item)
    date2[0] = date[j + 1];
   date[j + 1] = date[j];
   date[j] = date2[0];
  }
 }
 fclose(fp1);
 fclose(fp2);
 if ((fp2 = fopen("D:\\date.txt", "w")) == NULL)
 {
  printf("无法正常打开\n");
  exit(0);
 }
 for (i = 0; i < N + n; i++)
 {
  fprintf(fp2, "%d%c%d", date[i].item, date[i].c, date[i].value);
  printf("%d%c%d", date[i].item, date[i].c, date[i].value);
  printf("  ");
 }
 fclose(fp2);
 system("pause");
}

不足之处,请多指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值