C 言語における文字列の分類ソート(SORT) のテクニックを紹介する。
最初に古典的な SORT のテクニックではあるが長さの異なる文字列を SORT するのに向いている手法を紹介する。
0001.00 #include <stdio.h> 0002.00 #include <stdlib.h> 0003.00 #include <string.h> 0004.00 0005.00 #define TRUE 0 0006.00 #define FALSE -1 0007.00 0008.00 void main(void){ 0009.00 int i, len, pass, size; 0010.00 char ary[3][5], name[5], hold[5]; 0011.00 0012.00 printf("** TESTSORT **\n"); 0013.00 getchar(); 0014.00 memset(ary, 0, sizeof(ary)); 0015.00 strcpy(ary[0], "A002"); 0016.00 strcpy(ary[1], "A003"); 0017.00 strcpy(ary[2], "A001"); 0018.00 0019.00 size = 4; 0020.00 for(pass = 1; pass<=size-1; pass++){/*for-loop*/ 0021.00 for(i = 0; i<=size-2; i++){/*sub-loop*/ 0022.00 len = strlen(ary[i]); 0023.00 if(strncmp(ary[i], ary[i+1], len) > 0){/* 交換 */ 0024.00 len = strlen(ary[i]); 0025.00 memcpy(hold, ary[i], len); 0026.00 hold[len] = 0x00; 0027.00 len = strlen(ary[i+1]); 0028.00 memcpy(ary[i], ary[i+1], len); 0029.00 ary[i][len] = 0x00; 0030.00 len = strlen(hold); 0031.00 memcpy(ary[i+1], hold, len); 0032.00 ary[i+1][len] = 0x00; 0033.00 }/* 交換 */ 0034.00 }/*sub-loop*/ 0035.00 }/*for-loop*/ 0036.00 0037.00 for(i = 0; i<3; i++){ 0038.00 memcpy(name, ary[i], 4); 0039.00 name[4] = 0x00; 0040.00 printf("ary[%d] = %s\n", i, name); 0041.00 } 0042.00 getchar();
【 解説 】
上記で ステートメント 19行目から 35行目で SORT を行っている。
変数 size とは SORT の対象となる項目の数 + 1 の値である。
この SORT のテクニックは文字列を比較しての交換手法で行っているので、
SORT の対象となる各項目の長さが異なっている場合でも有効に働く。
IFS のディレクトリーの一覧表を出力したい場合に、IFS を API で読み取っても実は
アルファベット順には並ばない。
しかしディレクトリーやファイル名がアルファベット順に並んでいないと非常に
見づらくなってしまう。
eStudio の IFS タブをクリックして一覧表示を行うと次の画面のように IFS の一覧が表示され
編集することもできるが、ここには上記の SORT のテクニックを使って
ディレクトリーやファイル名がアルファベット順に並ぶよう設計されている。