• 締切済み

C言語での文字列

次のようなリストファイル(list.c) 0038 tokyo 004 osaka 0021 fukuoka 0013 aomori . . を一行ずつ読み込んだとき、最初の数字の方だけを表示(または変数に格納) することは出来るのでしょうか? もしくは一文字ずつ読み込んだとして、次の文字がスペースの場合次の行へ… などと言うことも出来るのでしょうか? 2つも質問してますが、何かよいアイディアお聞かせ下さい!

みんなの回答

  • bob
  • ベストアンサー率50% (52/103)
回答No.4

char num[32]; for( int i=0; i<n_data; i++ ) { fscanf( fp, "%s%*s", num ); printf( "%s\n", num ); } でどうでしょう?

  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 スペースで区切られているんですよね。 それならば、strtok関数で簡単に分離できますよ。 使用方法は、ヘルプで参照してください。 サンプルも載っていますから、すぐに使い方は解ると思います。

  • gould09
  • ベストアンサー率33% (196/589)
回答No.2

考え方だけを説明します。 実際に使うコマンドは、自分で調べてください。 ■1行づつ読み込む場合 ・読み込んだ行がサイズが0より大きければ以下の処理を行ないます。 ・先頭から1文字づつスペースコードを読み込むまで数字を読み込む。  (スペースは、アスキーコードの”40”?) ・アルゴリズムはスペースを探すループになります。 ■1文字づつ読み込む場合 ・読み込んだ行がサイズが0より大きければ以下の処理を行ないます。 ・先頭から1文字づつスペースコードまたは改行コードを読み込むまで数字を読み込む。  (改行コードはキャリッジリターンとラインフィードの2バイトからなります。コードはアスキー表を見てください。) ・この場合は、改行コードを読み込んだら次の行の処理になります。 ・アルゴリズムは2重ループになります。  (改行のループとスペースを探すループ)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

fscanfの%s指定でも簡単に出来ると思いますが…。(^_^) scanf類は空白文字等を区切りとして読み込みますので。 fscanf(fp,"%s",str); とかで読めるはずです。 このときfpはオープン済みのファイルのファイルポインタです。 そして勿論strは文字列として定義しておきます。 尚、fscanfの書式についてはうろ覚えですのでご使用前に調べてみて下さい。

関連するQ&A