如何用C语言将文本文件中内容读入程序,并按照第二列的数据进行从大到小排序。
如何用C语言将文本文件中内容读入程序,并按照第二列的数据进行从大到小排序(要保证排序后第一列和第二列的内容是一一对应的,像excel中的排序一样),并将排序好的内容输出到...
如何用C语言将文本文件中内容读入程序,并按照第二列的数据进行从大到小排序(要保证排序后第一列和第二列的内容是一一对应的,像excel中的排序一样),并将排序好的内容输出到txt文件中。
文本内容:
SA200701 -3278538
SB330802 -2134641
SC640904 0
SD750505 -1192300
SE960906 12001
SF180607 14250
SG560008 0
SH450009 -575835
SI930010 -56200
我已经找到原因了,修改好,谢谢大神!!!
真是太强大了!真牛!!! 展开
文本内容:
SA200701 -3278538
SB330802 -2134641
SC640904 0
SD750505 -1192300
SE960906 12001
SF180607 14250
SG560008 0
SH450009 -575835
SI930010 -56200
我已经找到原因了,修改好,谢谢大神!!!
真是太强大了!真牛!!! 展开
展开全部
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct stt
{
char c1[9];
int c2;
struct stt *next;
}STT;
void readFile(FILE *fp);
void writeFile(FILE *fp);
void printfSTT();//打印链表
void px();//将链表按c2降序排列
STT *sttHead=NULL,*sttTail=NULL;
int main()
{
FILE *fp;
if((fp=fopen("c:\\list.txt","rt+"))==NULL)
{
printf("can't open File!");
exit(1);
}
sttHead=(STT *)malloc(sizeof(STT));
sttHead->next=NULL;
readFile(fp);
printfSTT();
px();
printf("-----------排序后-------------\n");
printfSTT();
writeFile(fp);
return 0;
}
void px()
{
STT *sttHeadSave1=sttHead,*sttHeadSave2=NULL,sttSave,*nextSave;
while(sttHeadSave1->next!=NULL)
{
sttHeadSave2=sttHeadSave1->next;
while(sttHeadSave2->next!=NULL)
{
if((sttHeadSave1->next->c2)<(sttHeadSave2->next->c2))
{
sttSave=*(sttHeadSave1->next);
nextSave=sttHeadSave1->next->next;
*(sttHeadSave1->next)=*(sttHeadSave2->next);
sttHeadSave1->next->next=nextSave;
nextSave=sttHeadSave2->next->next;
*(sttHeadSave2->next)=sttSave;
sttHeadSave2->next->next=nextSave;
}
sttHeadSave2=sttHeadSave2->next;
}
sttHeadSave1=sttHeadSave1->next;
}
}
void printfSTT()
{
STT *sttHeadSave=sttHead;
printf("-----------打印链表-------------\n");
while(sttHeadSave->next!=NULL)
{
printf("%s %d\n",sttHeadSave->next->c1,sttHeadSave->next->c2);
sttHeadSave=sttHeadSave->next;
}
}
void readFile(FILE *fp)
{
int c2;
char c1[9];
STT *sttNew;
fseek(fp,0,SEEK_SET);
printf("-----------读取文件到链表-------------\n");
while(fscanf(fp,"%s %d",c1,&c2)!=-1)
{
sttNew=(STT *)malloc(sizeof(STT));
sttNew->next=NULL;
strcpy(sttNew->c1,c1);
sttNew->c2=c2;
if(sttHead->next==NULL)
sttHead->next=sttNew;
else
sttTail->next=sttNew;
sttTail=sttNew;
}
}
void writeFile(FILE *fp)
{
fseek(fp, 0, SEEK_SET);
fseek(fp, 0, SEEK_END);
printf("-----------开始写入文件-------------\n");
STT *sttHeadSave=sttHead;
fprintf(fp,"%s","-----------排序后-------------\n");
while(sttHeadSave->next!=NULL)
{
fprintf(fp,"%s %d%s",sttHeadSave->next->c1,sttHeadSave->next->c2,"\n");
sttHeadSave=sttHeadSave->next;
}
printf("------------写入完成-------------\n");
}
追问
膜拜大神!!!
确实可以,但是如果第二列里面有带小数的数据(比如:258342.235756的数据),我把代码里的int c2改成了float c2为什么就不行呢?
如果第二列里面是带小数的数据又该怎么改呢,麻烦大神再给修改下,真的非常感谢!!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询