C 言語でファイルの内容を逆順にする

CBeginner
オンラインで実践に進む

はじめに

この実験では、C プログラミング言語を使用してファイルの内容を逆順にする方法を学びます。 入力ファイルの内容を 1 文字ずつ読み取り、逆順に出力ファイルに書き戻します。

注意:コーディングの練習と、gcc を使用してコンパイルおよび実行する方法を学ぶために、~/project/main.c ファイルを自分で作成する必要があります。

cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main

入力ファイルと出力ファイルを開く

最初のステップでは、fopen() 関数を使用して入力ファイルと出力ファイルを開きます。これらのファイルに対して 2 つのファイルポインタを作成します。1 つは入力用、もう 1 つは出力用です。

FILE *input_file, *output_file;
input_file = fopen("input.txt", "r");
output_file = fopen("output.txt", "w");

入力ファイルの文字数をカウントする

このステップでは、fseek() 関数と ftell() 関数を使用して、入力ファイルの文字数をカウントします。 fseek(input_file, 0, SEEK_END); を使用してファイルポインタをファイルの末尾に移動し、ftell(input_file); を使用して現在のファイル位置を取得します。 これにより、入力ファイルの総文字数がわかります。

fseek(input_file, 0, SEEK_END);
long total_characters = ftell(input_file);

入力ファイルから出力ファイルに文字を逆順にコピーする

これで入力ファイルの総文字数がわかったので、文字を逆順に出力ファイルにコピーします。 入力ファイルを 1 文字ずつ読み取り、fputc() 関数を使用して各文字を出力ファイルに書き込みます。 入力ファイルの最後の文字から始め、fseek(input_file, -1L, SEEK_CUR); を使用して後方に移動します。

for (long i = total_characters-1; i >= 0; i--) {
  fseek(input_file, i, SEEK_SET);
  char c = fgetc(input_file);
  fputc(c, output_file);
}

入力ファイルと出力ファイルを閉じる

最後のステップでは、fclose() 関数を使用して入力ファイルと出力ファイルを閉じます。

fclose(input_file);
fclose(output_file);

まとめ

この実験では、C 言語を使用してファイルの内容を逆順にする方法を学びました。入力ファイルと出力ファイルを開き、入力ファイルの文字数をカウントし、文字を逆順に出力ファイルにコピーし、最後に入力ファイルと出力ファイルを閉じました。