| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1423 人关注过本帖
标题:文件合并的小错误
只看楼主 加入收藏
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
文件合并的小错误
题目如下:
【问题描述】有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。

【输入形式】文件A,文件B
【输出形式】文件C
【样例输入】

文件A内容:acegikmoq

文件B内容:bdfhjlnp

【样例输出】文件C内容:abcdefghijklmnopq
我的程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    FILE*fa,*fb,*fc;
    int i,j,k;
    char str[100],str1[100];
    char tem;
    if((fa=fopen("A.txt","r"))==NULL)
    {
        printf("error: cannot open A file!\n");
        exit(0);
    }
    fgets(str,99,fa);
    fclose(fa);
    if((fb=fopen("B.txt","r"))==NULL)
    {
        printf("error: cannot open B file!\n");
        exit(0);
    }
    fgets(str1,100,fb);
    fclose(fb);
    strcat(str,str1);
    for(i=strlen(str)-1;i>1;i--)
        for(j=0;j<i;j++)
            if(str[j]>str[j+1])
            {
                tem=str[j];
                str[j]=str[j+1];
                str[j+1]=tem;
            }

    if((fc=fopen("C.txt","w"))==NULL)
    {
        printf("error: cannot open C file!\n");
        exit(0);
    }
    fputs(str,fc);
    fclose(fc);
    system("pause");
    return 0;
}
请问哪里有错啊!
搜索更多相关主题的帖子: include 信息 字母 
2017-05-24 22:59
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:4 
题目并没有说每个文件中有多少个字符,所以,你这100个元素的数组是从哪里得到的?
另外,你为什么要对链接之后的字符串进行排序?示例是示例,实际是实际,实际上谁告诉你两个文件的字符串是示例这样子的?

最简单的办法,采用单字符输出,先输出A文件的一个字符,然后再疏忽B文件的一个字符,做一个循环。



[此贴子已经被作者于2017-5-24 23:15编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-24 23:03
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10611
专家分:43210
注 册:2014-5-20
收藏
得分:3 
#include <stdio.h>
#include <stdlib.h>

void _load(int *a, char *filename)
{
    char ch;
    FILE *fp;
    if ((fp=fopen(filename,"rb")) == NULL)
    {
        printf("error: cannot open %s file!\n", filename);
        exit(0);
    }
    while ((ch=fgetc(fp)) != EOF)
    {
        if (ch>32 && ch<128)
            a[ch]++;
    }
    fclose(fp);
}

void _save(int *a, int n, char *filename)
{
    FILE *fp;
    if ((fp=fopen(filename,"wb")) == NULL)
    {
        printf("error: cannot open %s file!\n", filename);
        exit(0);
    }
    int i, j;
    for (i=0; i<n; ++i)
    {
        if (a[i] > 0)
        {
            for (j=0; j<a[i]; ++j)
                fputc(i, fp);
        }
    }
    fclose(fp);
}

void _prn(int *a, int n)
{
    int i, j;
    for (i=0; i<n; ++i)
    {
        if (a[i] > 0)
        {
            for (j=0; j<a[i]; ++j)
                printf("%c", i);
        }
    }
}

int main()
{
    int i, a[128]={0};
    _load(a, "A.txt");
    _load(a, "B.txt");
    _save(a, 128, "C.txt");
    _prn(a, 128);
    return 0;
}
2017-05-25 06:46
何小达
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:70
注 册:2017-5-25
收藏
得分:3 
#include "stdio.h"
#include "string.h"
void main()
{FILE *fp1,*fp2,*fp;
    char *a,*b,*c;
    int i,j,k=0;
    fp=fopen("d:\\c.txt","a");
    fp1=fopen("d:\\a.txt","r");
    fp2=fopen("d:\\b.txt","r");
    fscanf(fp1,"%s",a);
    fscanf(fp2,"%s",b);
    for(i=0,j=0;a[i]&&b[j];)
    if(a[i]<b[j])
        c[k++]=a[i++];
        else c[k++]=b[j++];
        if(a[i]=='\0')
            strcat(c,b+j);
            if(b[i]=='\0')
            strcat(c,a+i);
       fprintf(fp,"%s",c);
    fclose(fp);fclose(fp1);fclose(fp2);
   
}
我这个可能相对简单点,没有过多的操作。
2017-05-25 16:30
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
sorry啦,各位童鞋辛苦,我理解错题啦,不能用txt的,
2017-05-25 18:23
快速回复:文件合并的小错误
数据加载中...
 
   



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

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