對二維陣列中的字串進行排序
阿新 • • 發佈:2021-12-18
//對二維陣列中的字串進行排序 //用選擇排序法的思想 #include <stdio.h> #include <string.h> #define SIZE 10 #define LIMIT 80 int main(void) { char names[SIZE][LIMIT]; char *ptchar[SIZE];//建立一個指標陣列,讓這個指標陣列與一維字串陣列一一對應,從而將程式等價為對指標排序 char *ptchar_1=NULL; for (int n=0;n<;n++) { fgets(names[n],LIMIT,stdin); if (ptchar_1=strchr(names[n],'\n'))//由於要多次輸入,因此對fgets()函式的優化必不可少 { *ptchar_1='\0'; } else { while (getchar()!='\n') { continue; } } } for (int i=0;i<SIZE;i++) { ptchar[i]=names[i]; } int out_i; int in_i; for (out_i=0;out_i<SIZE-1;out_i++) { for (in_i=out_i+1;in_i<SIZE;in_i++) { if (strcmp(ptchar[out_i],ptchar[in_i])>0)//strcmp函式能夠比較能夠按順序比較字元之間的大小關係(ASCII碼) { char *ptchar_2;//這個指標作為中間變數。 ptchar_2=ptchar[out_i]; ptchar[out_i]=ptchar[in_i]; ptchar[in_i]=ptchar_2; } } } printf("print the original characters :\n"); for (int n=0;n<SIZE;n++) { printf("%s\n",names[n]); } printf("print the changed characters :\n"); for (int n=0;n<SIZE;n++) { printf("%s\n",ptchar[n]); } return 0; }
列印結果:
mjahsjkdjkjklasd
masjdghjhajkdhjkahsjk
maygwjhjasjdkhjkahsd
masjdjahsjkhjkf
mahdgjhagsjhf
mashdgjahrwjjasgjdh
mhjasgchjaxjhagshgdas
masjdgjahsjhfjkhajksd
mashdghjagsgfhfhjagshd
mashdgjhasgfhasgdprint the original characters :
mjahsjkdjkjklasd
masjdghjhajkdhjkahsjk
maygwjhjasjdkhjkahsd
masjdjahsjkhjkf
mahdgjhagsjhf
mashdgjahrwjjasgjdh
mhjasgchjaxjhagshgdas
masjdgjahsjhfjkhajksd
mashdghjagsgfhfhjagshd
mashdgjhasgfhasgdprint the changed characters :
mahdgjhagsjhf
mashdghjagsgfhfhjagshd
mashdgjahrwjjasgjdh
mashdgjhasgfhasgd
masjdghjhajkdhjkahsjk
masjdgjahsjhfjkhajksd
masjdjahsjkhjkf
maygwjhjasjdkhjkahsd
mhjasgchjaxjhagshgdas
mjahsjkdjkjklasd
由此可知,該程式確實將輸入的字串按照ASCII碼進行排序。