#include #include #include #define Nbuf 256 #define Nword 1024 void cmd_remove(char*[], int); void cmd_insert(char*[], int, char*); void cmd_swap (char*[], int, int); void cmd_show (char*[]); int chk_length (char*[]); int chk_range(int, int); /* ポインタ配列の要素を、文字列を保持していないときはNULLにしてあります */ int main(int argc, char *argv[]){ FILE *fp; char buf[Nbuf]; char *words[Nword]; int i, len, n; int arg1, arg2; if(argc != 3){ fprintf(stderr, "Invalid argument(s).\n"); exit(1); } /* 文字列の配列をNULLで初期化 */ for( i=0 ; i"); scanf("%s", buf); if(strcmp(buf, "remove") == 0){ scanf("%d", &arg1); if(chk_range( arg1, n ) != 0) cmd_remove( words, arg1 ); } else if(strcmp(buf, "swap") == 0){ scanf("%d %d", &arg1, &arg2); if(chk_range( arg1, n ) && chk_range( arg2, n )) cmd_swap( words, arg1, arg2 ); } else if(strcmp(buf, "insert") == 0){ scanf("%d %s", &arg1, buf); if(chk_range( arg1, n+1 )) cmd_insert( words, arg1, buf ); } else if(strcmp(buf, "show") == 0){ cmd_show( words ); } else if(strcmp(buf, "end") == 0){ break; } else { /* error */ fprintf(stderr, "Illegal command.\n"); } n = chk_length( words ); } /* 結果をファイルに出力 */ fp = fopen( argv[2], "w" ); if(fp == NULL){ fprintf(stderr, "Could not open %s\n", argv[2]); exit(3); } for( i=0 ; ipos ; i-- ) arr[i] = arr[i-1]; arr[pos] = (char *) malloc( sizeof(char)*(strlen(word)+1) ); strcpy( arr[pos], word ); } void cmd_swap(char *arr[], int pos1, int pos2){ char *tmp; if(pos1 != pos2){ tmp = arr[pos1]; arr[pos1] = arr[pos2]; arr[pos2] = tmp; } } void cmd_show(char *arr[]){ int i=0; while( arr[i] ){ printf("%4d: %s\n", i, arr[i]); i++; } }