| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:C编程文件的问题,
只看楼主 加入收藏
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:17 
C编程文件的问题,
     一个文件中有以下信息
   1201 0103 小李
   1203 0102 小王
   1202 0105  
   1201 0104  
 编程从文件中读信息,然后排序
 排序完输出为:
1201  0103  小李
1201 0104   
1202 0105 我
1203 0102 小王
搜索更多相关主题的帖子: 编程 信息 
2011-07-21 13:02
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
   这是个很复杂的问题,涉及到读文件,一行一行的读,还有空格。。。。。以第一列排,第一列相同的再根据第二列排,不知道有没有高手能完成,多谢
2011-07-21 13:04
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
收藏
得分:0 
老实的说,这不是一个很复杂的问题,虽然涉及到了文件,但也只有那么一点点,重要的还是你怎样去读取它,读取后用什么类型的数据去存储,还有就是我觉得你如果学过动态链表的话这个完全不成问题。

菜鸟一名,准备起飞
2011-07-21 13:09
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:10 
程序代码:
FILE *p;
p=fopen("D:\\1.txt","r");
if(p==NULL)
return 0;
char a[4][20],b[20];
int i,t,n[4],j;
for(i=0;i<4;i++)
{fscanf(p,"%d ",&n[i]);
fgets(a[i],18,p);
}
for(i=0;i<4;i++)
for(j=i;j<4;j++)
if(n[i]>n[j])
{t=n[i];n[i]=n[j];n[j]=t;
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);}
for(i=0;i<4;i++)
{printf("%d  ",n[i]);
printf("%s",a[i]);
}
2011-07-21 13:23
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
回复 4楼 lccwyj
    你好,我的文件信息为
    4607 010523 徏杮摽暥 5012
    4605 020528 孎揷恗巙 5047
    4607 860066 惵桍媀彑 5010
    4601 010537 暯棞宐   5031
    4607 910132 妬娵岶巙 5016
    4601 030505 壛悾晹廏孭 5040
    4607 860195 憵揷帯旻 5015
    4601 010510 桳晉晲巙 5043
    4602 030619 堜忋榓旤 5021
    4607 010553 栰乆懞妜恖 5017
    4609 030521 嶳揷朷旤 5101
    4607 040511 拞懞怣岶 5011
    4602 020510 嶁揷夒徍 5030
    EOF
 而且每行结束是回车键,  不知道怎么完成排序,和上面的不一样的应该,好像不 能用那种
2011-07-21 14:30
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:0 
4601  010510 桳晉晲巙 5043
4601  010537 暯棞宐   5031
4601  030505 壛悾晹廏孭 5040
4602  020510 嶁揷夒徍 5030
4602  030619 堜忋榓旤 5021
4605  020528 孎揷恗巙 5047
4607  010523 徏杮摽暥 5012
4607  010553 栰乆懞妜恖 5017
4607  040511 拞懞怣岶 5011
4607  860066 惵桍媀彑 5010
4607  860195 憵揷帯旻 5015
4607  910132 妬娵岶巙 5016
4609  030521 嶳揷朷旤 5101

答案是这个么?
2011-07-21 14:46
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
回复 6楼 lccwyj
是的啊, 输出的应该是这样的,
2011-07-21 14:50
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
回复 6楼 lccwyj
恩,求代码,然后自己好好研究,
2011-07-21 14:54
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INIT_ROWS 100
#define INCREMENT 50

typedef struct {
    unsigned num1;
    unsigned num2;
    char     name[9];
} DATA, * PDATA;

void insertion_sort(void * data,
                    unsigned num,
                    unsigned size,
                    int (* compare)(const void *, const void *))
{
    int i, j, k;
    void * temp = malloc(size);
    for(i = 1; i < num; i++) {
        for(j = 0; j < i; j++)
            if(compare(data + j * size, data + i * size) > 0)
                break;
        memcpy(temp, data + i * size, size);
        for(k = i; k > j; k--)
            memcpy(data + k * size, data + (k - 1) * size, size);
        memcpy(data + j * size, temp, size);
    }
    free(temp);
}

int compare1(const void * p1, const void * p2) {
    unsigned var1 = ((PDATA)(p1))->num1,
             var2 = ((PDATA)(p2))->num1;
    if(var1 == var2)
        return 0;
    if(var1 > var2)
        return 1;
    return -1;
}

int compare2(const void * p1, const void * p2) {
    unsigned var1 = ((PDATA)(p1))->num2,
             var2 = ((PDATA)(p2))->num2;
    if(var1 == var2)
        return 0;
    if(var1 > var2)
        return 1;
    return -1;
}

int main(void) {
    FILE *      fp_in = NULL;
    FILE *      fp_out = NULL;
    char        in_file_name[128];
    char        out_file_name[128];
    PDATA       pdatas = (PDATA)malloc(sizeof(DATA) * INIT_ROWS);
    unsigned    rows = 0;
    unsigned    size = INIT_ROWS;
    unsigned    i;
    printf("请输入需要排序的源文件名:");
    fflush(stdout);
    scanf("%s", in_file_name);
    printf("请输入排序后存放的文件名:");
    fflush(stdout);
    scanf("%s", out_file_name);
    if((fp_in = fopen(in_file_name, "r")) == NULL) {
        printf("%s 打开失败,程序将结束!\n");
        exit(1);
    }
    if((fp_out = fopen(out_file_name, "w")) == NULL) {
        printf("%s 打开失败,程序将结束!\n");
        exit(1);
    }
    while(fscanf(fp_in, "%u%u%s",
          &pdatas[rows].num1,
          &pdatas[rows].num2,
          pdatas[rows].name) != EOF)
    {
        if(++rows == size) {
            pdatas = realloc(pdatas, size += INCREMENT);
            if(pdatas == NULL)
                exit(1); // .......
        }
    }
    insertion_sort(pdatas, rows, sizeof(DATA), compare2);
    insertion_sort(pdatas, rows, sizeof(DATA), compare1);
    for(i = 0; i < rows; i++)
        fprintf(fp_out, "%u %u %s\n",
                pdatas[i].num1,
                pdatas[i].num2,
                pdatas[i].name);
    fclose(fp_in);
    fclose(fp_out);
    return 0;
}

My life is brilliant
2011-07-21 17:18
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:5 
FILE *p,*pp=fopen("D:\\2.txt","w");
p=fopen("D:\\1.txt","r");
if(p==NULL)
return 0;
char a[13][50],b[50];
int i,t,n[16],j,c,d;
for(i=0;i<13;i++)
{fscanf(p,"%d ",&n[i]);
fgets(a[i],40,p);
}
for(i=0;i<13;i++)
for(j=i;j<13;j++)
{if(n[i]>n[j])
{t=n[i];n[i]=n[j];n[j]=t;
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);}
else if(n[i]==n[j])
{c=atoi(a[i]);
d=atoi(a[j]);
if(c>d)
{t=n[i];n[i]=n[j];n[j]=t;
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);}}}
for(i=0;i<13;i++)
{fprintf(pp,"%d  ",n[i]);
fprintf(pp,"%s",a[i]);
}
2011-07-21 17:36
快速回复:C编程文件的问题,
数据加载中...
 
   



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

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