本文目录一览:
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语言如何对文件中的数据进行排序
如果文件较短,可以全部读到内存,修改后写入文件。
如果文件很大,没有好办法,只能在新文件中写入原文件修改的内容,然后删除原来的文件,重新命名。