c 實現對檔案操作:冒泡排序

來源:互聯網
上載者:User

分別實現選擇排序(在下下一篇文章)和冒泡排序對以下檔案進行排序。
支援如下形式調用:BubbleSort.exe input.txt output.txt 0
                                    BubbleSort.exe input.txt output.txt 1
                                     (0:從小到大,1:從大到小)。
注意中文處理(若無法處理可以只對學號排序,需要在文檔中說明)

  1 #include<stdio.h>  2 #include<stdlib.h>  3 #include<string.h>  4   5 #define N 200  6 struct student{  7     char num[200];  8     char name[200];  9     float ave; 10 }st[N],temp1; 11  12 struct Newstudent{ 13     char num[200]; 14     char name[200]; 15     char row[200]; 16     float ave; 17 }st_New[N],temp2; 18  19 //void SelectionSort(); 20  21  22 void main(int argc,char **argv){ 23    FILE *fp1,*fp2; 24    int i,j,sum,min,k; 25    char str[200]; 26    char *input,*output,flag; 27    char tempOne[200],tempTwo[200],tempThree[200],tempFour[200]; 28    //char *str[N]; 29  30    if(argc<4){ 31       input="input.txt"; 32       output="output.txt"; 33       flag='0'; 34     } 35    else{ 36       input=*(argv+1); 37       output=*(argv+2); 38       flag=**(argv+3); 39    } 40  41    /*讀檔案*/ 42    if((fp1=fopen("input.txt","r"))==NULL){ 43        printf("can not open."); 44        exit(0); 45    } 46    sum=0; 47    printf("the File '演算法設計點名冊' is :\n"); 48     49    for(i=0;(fgets(str,200,fp1))!= NULL;i++,sum++) { 50        strcpy(st[i].num,strtok(str,",")); 51        strcpy(st[i].name,strtok(NULL,",")); 52        //printf("%s",st[i].num); 53        //printf("%s",st[i].name); 54    } 55    printf("%d",flag); 56    printf("如果希望從小到大排列請輸入0,如果希望從大到小排列請輸入1:\n"); 57    scanf("%d",&flag); 58   /*選擇排序*/ 59   // for(i=0;i<193;i++){ 60         //min=i; 61         //for(j=i+1;j<194;j++) 62         //    if(flag){ 63         //      if(strcmp(st[j].num,st[min].num)>0) 64         //         min=j; 65         //    } 66         //    else{ 67         //      if(strcmp(st[j].num,st[min].num)<0) 68         //         min=j; 69         //    } 70         //strcpy(tempOne,st[i].num); 71         //strcpy(st[i].num,st[min].num); 72         //strcpy(st[min].num,tempOne);//互換值 73         // 74         //strcpy(tempTwo,st[i].name); 75         //strcpy(st[i].name,st[min].name); 76         //strcpy(st[min].name,tempTwo);//互換值 77   // } 78    /*冒泡排序*/ 79    for(i=0;i<193;i++) 80     { 81         for(j=0;j<193-i;j++){ 82             if(flag){ 83               if(strcmp(st[j].num,st[j+1].num)<0){ 84                 strcpy(tempThree,st[j].name); 85                 strcpy(st[j].name,st[j+1].name); 86                 strcpy(st[j+1].name,tempThree); 87  88                 strcpy(tempFour,st[j].num); 89                 strcpy(st[j].num,st[j+1].num); 90                 strcpy(st[j+1].num,tempFour);     91               } 92             } 93             else{ 94                 if(strcmp(st[j].num,st[j+1].num)>0){ 95                     strcpy(tempThree,st[j].name); 96                     strcpy(st[j].name,st[j+1].name); 97                     strcpy(st[j+1].name,tempThree); 98  99                     strcpy(tempFour,st[j].num);100                     strcpy(st[j].num,st[j+1].num);101                     strcpy(st[j+1].num,tempFour);    102                }103             }104         }105     }106    /*寫入新檔案*/107    if((fp2=fopen("output.txt","wb"))==NULL){108        printf("can not open.");109        exit(0);110    }111    for(j=0;j<sum;j++){112        strcpy(st_New[j].num,strcat(st[j].num,","));//得到學號和逗號113        //printf("%s",st_New[j].num);114        strcpy(st_New[j].name,strcat(st_New[j].num,st[j].name));//合并num和學生姓名115        printf("%s",st_New[j].name);//輸出排序後的點名冊116        fputs(st_New[j].name,fp2);117    }118 119    /*關閉所有檔案*/120    fclose(fp1);121    fclose(fp2);122    /*NOUSe*/123    scanf("%d",i);124 }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.