まずはC言語で.標準入力から可変個のデータを読み込む関数と,それを出力する関数を作ってみた.mylib.cとして保存しておく.
#include "mylib.h" /** * @brief 配列にデータを標準入力から読み込む * * @param size 配列の大きさ * * @return 配列 */ int *load_array(int *size){ char line[BUFSIZ]; char *token; char *str; int allocated=1; int *array=(int *)calloc(allocated,sizeof(int)); *size=0; // EOFがくるまで繰り返し while(fgets(line,BUFSIZ,stdin)!=NULL){ // 入力された文字列をトークンに分割 for(str=line;(token=strtok(str," \n"))!=NULL;str=NULL){ // メモリが足りなければ追加 if(*size >= allocated){ allocated*=2; array=(int *)realloc(array,allocated*sizeof(int)); } // 文字列を数値に変換して配列へ格納 array[*size]=atoi(token); (*size)++; } } // 配列の長さを調整 array=(int *)realloc(array,(*size)*sizeof(int)); return array; } /** * @brief 配列の内容を1行につき10個ずつ表示する * * @param array 配列 * @param size 配列の大きさ */ void print_array(int *array,int size){ int i; for(i=0;i<size;i++){ printf("%8d",array[i]); if(i%10==9)printf("\n"); } }
メモリ確保を賢くやってみました.確保しすぎた分を最後に微調整してぴったりにしています.
mylib.hはプロトタイプ宣言とヘッダのインクルード.
#include <stdio.h> #include <stdlib.h> #include <string.h> int *load_array(int *size); void print_array(int *array,int size);
とりあえず,使い方の例は,
#include "mylib.h" int main(){ int *array; int size; //入力 array=load_array(&size); //ここでソート //bubblesort(array,size); // //出力 print_array(array,size); free(array); return 0; }
こんなプログラム(test.c)を作って,一緒にコンパイルする.
Linuxなら
$ gcc -o test test.c mylib.c $ ./test.c < data.txt
data.txtは,データが各行,適当な個数ごとにスペース区切りで書かれているものとする.
64 70 12 34 35 74 24 81 86 89 54 76 66 92 41 93 95 97 3 49 56 73 78 90 96 98 69 57 44 36 9 20 55 31 53 79 94 99 11 87 5 15 59 17 46 52 62 75 77 38 27 88 23 91 32 19 16 8 25 30 58 72 43 42 29 48 50 60 71 40 65 47 10 13 80 82 83 14 51 2 84 39 45 0 68 85 61 1 26 21 18 22 6 33 37 28 63 4 67 7
さて,ソーティング部分を作るか・・・.