×

c语言文件内容排序

c语言文件内容排序(c语言排序的两种方法)

admin admin 发表于2023-04-03 14:05:10 浏览49 评论0

抢沙发发表评论

本文目录一览:

c语言用文件来排序!拜托拜托!?

不用结构体就比较麻烦。按要求用数组做出来了,若帮助了你,请记着采纳。

代码文本:

#include "stdio.h"

#include string.h

#define N 4

int main(int argc,char *argv[]){

char ID[N][5],NM[N][11],t[11];

int HM[N],PR[N],SM[N],i,j,k,n;

FILE *fp;

if((fp=fopen("1.txt","r"))==NULL){

printf("Open teh file failure, exit...\n");

return 0;

}

for(n=0;fscanf(fp,"%s%s%d%d",ID[n],NM[n],HM[n],PR[n])==4;n++)

SM[n]=HM[n]+PR[n];

printf("  排名\t学号\t姓名\t高数\t程序\t总分\n");

printf("=============================================\n");

for(i=0;in;i++){

for(k=i,j=k+1;jn;j++)

if(SM[k]SM[j])

k=j;

if(k!=i){

j=SM[k],SM[k]=SM[i],SM[i]=j;

j=PR[k],PR[k]=PR[i],PR[i]=j;

j=HM[k],HM[k]=HM[i],HM[i]=j;

strcpy(t,ID[k]),strcpy(ID[k],ID[i]),strcpy(ID[i],t);

strcpy(t,NM[k]),strcpy(NM[k],NM[i]),strcpy(NM[i],t);

}

printf("%5.02d\t%3s\t%s\t%3d\t%3d\t%d\n",i+1,ID[i],NM[i],HM[i],PR[i],SM[i]);

}

fclose(fp);

return 0;

}

c语言 文件内容的重新排序问题

#include stdio.h

#include stdlib.h

//假设要打开的文件内容全是整数(如果是浮点数参照修改)

//数据与数据之间用空格分开

//每行多少数据可以不相同

//数组从小到大排序

void sortit(int *a,int n) {

int i,j,m;

for(i=0;in-1;i++)

for(j=i+1;jn;j++)

if(a[i]a[j]){

m=a[i];a[i]=a[j];a[j]=m;

}

}

//输出数组元素

void printit(int *a,int n){

int i;

for(i=0;in;i++){

printf("%5d",a[i]);

if (i%10==9) printf("\n"); //设置每10个换行

}

}

//从文件fp中读取n个数据到a

void getdata(FILE *fp,int *a,int n){

int i;

fseek(fp,0,0);

for(i=0;in;i++)

fscanf(fp,"%d",a[i]);

}

//获取文件中整数数椐的个数

int getdatabound(FILE *fp){

int i=0,n;

fseek(fp,0,0);

while(fscanf(fp,"%d",n)!=EOF) i++;

return i;

}

int main(){

int n,*a;

char *myfile="d:\\data.txt";

FILE *fp;

if ((fp=fopen(myfile,"r"))==NULL){

printf("打开文件%s失败\n",myfile);

return 0;

}

n=getdatabound(fp); //获取该文件中有多少整数

printf("该文件共有%d个整数\n",n);

a=(int *)malloc(sizeof(int)*n); //分配n个整数的空间

getdata(fp,a,n); //从文件fp中读取n个数据到a

fclose(fp);

printf("排序前的数组\n");

printit(a,n); //输出数组的值

printf("\n");

sortit(a,n);

printf("排序后的数组\n");

printit(a,n);

printf("\n");

}

C语言实现文件排序

只需要将stdinf结构体中的sc改为float类型,并修改对应的fscanf()/fprintf()中的格式符即可,如下:

//---------------------------------------------------------------------------

#include

stdio.h

#include

stdlib.h

typedef

struct

{

char

name[80];

float

sc;

}

stdinf;

int

cmp(const

void

*a,const

void

*b)

{

return

((const

stdinf*)b)-sc-((const

stdinf

*)a)-sc;

}

int

main(void)

{

FILE

*fp;

stdinf

*sts=NULL;

int

i,n;

fp=fopen("1.txt","r");

/*打开文件*/

for

(n

=

0;

!feof(fp);

n++)

{

/*读取信息到sts数组*/

if

(i)

sts=(stdinf*)realloc(sts,sizeof(stdinf)*(n+1));

else

sts=(stdinf*)malloc(sizeof(stdinf));

fscanf(fp,"%s

%f",sts[n].name,sts[n].sc);

}

fclose(fp);

qsort(sts,i,sizeof(stdinf),cmp);

/*排序*/

fp=fopen("1.txt","w");

/*重新打开文件*/

for

(i

=

0;

in;

i++)

{

/*写入有序信息*/

fprintf(fp,"%s

%f\n",sts[i].name,sts[i].sc);

}

fclose(fp);

return

0;

}

//---------------------------------------------------------------------------

c语言 文件内容的重新排序

采用插入排序,通过排索引加速。C代码:

#include stdio.h

#define NATION_MAX 256

#define LINE_MAX 1000

#define HEADER_SIZE 256

typedef struct

{

int No;

char Nation[NATION_MAX];

int gold, silver, bronze, sum;

}Medal;

int loadMedal(Medal *medals, char *header, const char *fileName)

{

int n = 0;

FILE *fp = fopen(fileName, "r");

if(!fp) return 0;

fgets(header, HEADER_SIZE, fp);

while(fscanf(fp, "%d%s%d%d%d%d", (medals[n].No), medals[n].Nation,

(medals[n].gold), (medals[n].silver), (medals[n].bronze),

(medals[n].sum)) == 6){

n ++;

if(n = LINE_MAX) return n;

}

fclose(fp);

return n;

}

void showMedal(Medal *medals, char *header, int nMedal, int *sorted)

{

int i, index;

fputs(header, stdout);

for(i = 0; i nMedal; i ++) {

index = sorted[i];

printf("%d\t%s\t%d\t%d\t%d\t%d\n", medals[index].No,

medals[index].Nation, medals[index].gold,

medals[index].silver, medals[index].bronze, medals[index].sum);

}

}

void sortByNation(Medal *medals, int nMedal, int *sorted)

{

int i, j;

int key;

int *a = sorted;

int index;

for(j = 1; j nMedal; j ++){

key = medals[a[j]].Nation[0];

index = a[j];

for(i = j - 1; (medals[a[i]].Nation[0] key) (i = 0); i--){

a[i+1] = a[i];

}

a[i+1] = index;

}

}

void sortBySum(Medal *medals, int nMedal, int *sorted)

{

int i, j;

int key;

int *a = sorted;

int index;

for(j = 1; j nMedal; j ++){

key = medals[a[j]].sum;

index = a[j];

for(i = j - 1; (medals[a[i]].sum key) (i = 0); i--){

a[i+1] = a[i];

}

a[i+1] = index;

}

}

void resetIndex(int *sorted, int nMedal)

{

int i;

if(nMedal LINE_MAX) return ;

for(i = 0; i nMedal; i++){

sorted[i] = i;

}

}

int main()

{

Medal medals[LINE_MAX];

int sorted[LINE_MAX];

char header[HEADER_SIZE];

int nMedal;

nMedal = loadMedal(medals, header, "medal.txt");

resetIndex(sorted, nMedal);

/* showMedal(medals, header, nMedal, sorted); */

/* 按国家首字母排序*/

sortByNation(medals, nMedal, sorted);

/* 显示 */

showMedal(medals, header, nMedal, sorted);

/* 按总奖牌数排序 */

sortBySum(medals, nMedal, sorted);

/* 显示 */

showMedal(medals, header, nMedal, sorted);

return 0;

}

C语言如何对文件中的数据进行排序

如果文件较短,可以全部读到内存,修改后写入文件。

如果文件很大,没有好办法,只能在新文件中写入原文件修改的内容,然后删除原来的文件,重新命名。