:: reverse dictionary ::
※ソースファイルについて
ファイルから文字列で1行ずつ読み込むには、fgets 関数を使います。
#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSTR_MAX 256 /* 文字列の最大長 */
FILE *fp;charstrs[10][STR_MAX]; /* 読み込む文字列 */intcount, last; fp = fopen("sample.txt", "r");if(fp == NULL) { printf("sample.txt を開けませんでした。\n");returnEXIT_FAILURE; } count = 0; /* 読み込み */while(fgets(strs[count], STR_MAX, fp) != NULL) { /* 最後の改行を削除 */ last = strlen(strs[count]) - 1;if(strs[count][last] == '\n') { strs[count][last] = '\0'; } count++; } fclose(fp);
sample.txt の内容が
Line1 Line2 Line3
となっている場合、strs[0] は "Line1" 、strs[1] は "Line2" 、strs[2] は "Line3" になります。
ワイド文字列の場合は fgetws 関数を使います。
#include<locale.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSTR_MAX 256 /* 文字列の最大長 */
FILE *fp; wchar_t strs[10][STR_MAX]; /* 読み込む文字列 */intcount, last; setlocale(LC_ALL, "ja"); /* ロケールを日本語に設定 */ fp = fopen("sample.txt", "r");if(fp == NULL) { wprintf(L"sample.txt を開けませんでした。\n");returnEXIT_FAILURE; } count = 0; /* 読み込み */while(fgetws(strs[count], STR_MAX, fp) != NULL) { /* 最後の改行を削除 */ last = wcslen(strs[count]) - 1;if(strs[count][last] == L'\n') { strs[count][last] = L'\0'; } count++; } fclose(fp);
sample.txt の内容が
1行目 2行目 3行目
となっている場合、strs[0] は "1行目" 、strs[1] は "2行目" 、strs[2] は "3行目" になります。
char*fgets(char*s,intsz, FILE *i) wchar_t *fgetws(wchar_t *s,intsz, FILE *i)
入力ストリーム i から文字列で1行を読み込みます。
読み込む文字列の長さ sz が1行の長さより小さい場合(※)は、sz - 1 の長さの文字列が読み込まれます。 そのため、1行ずつ読み込むには1行の長さ以上の値(※)を sz に指定する必要があります。
※ 改行文字と NULL 文字を含む
s … 読み込んだ文字列を格納する文字列バッファ
sz … 読み込む文字列の長さ(fgets はバイト数、fgetws は文字数)
i … 入力ストリームのポインタ
・読み込む文字列がある … 文字列バッファ s へのポインタ(読み込んだ文字列)
・読み込む文字列がない(入力ストリームの終わり) … NULL
・読み込み失敗 … NULL
読み込んだ行の最後の改行文字は削除されずに残ります。
Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com