• ベストアンサー

文字取得

教えてください! fgetsでストリームから文字をline[20]に格納できたとします。 その後、lineから1文字づつ参照していき、 カンマで区切られたデータをそれぞれ別の変数に格納したいのです。 1文字づつ参照するためにはどんな関数でできますか? getcやfgetcではできないと思うのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

No5 の修正です。 インクリメントの場所を間違ってました。 int i; char *p[20]; i=0; p[i] = strtok(line, ","); while(p[i]!=NULL){ i++; p[i] = strtok(NULL, ","); }

yoro
質問者

お礼

無事解決しました。 みなさんありがとうございます。 また何かわからないことがあったら ここに投稿するつもりです。

その他の回答 (5)

回答No.5

格納したあとに分割するという考え方でどうでしょうか? int i; char *p[20]; i=0; p[i] = strtok(line, ","); while(p[i]!=NULL){ p[i] = strtok(NULL, ","); i++ }

  • Haizy
  • ベストアンサー率40% (404/988)
回答No.4

こんにちは、ふたたび。 VCは、離れて久しいぞな(^^; さて、日本語(1ワード=2バイト)が入ると言う事ですね。 すると、各Cコンパイラ(・・・というか、.hに関数が準備されていると思います)ANSI C において、日本語処理は定められていないと思いました。(ウチ最新のコンパイラじゃないので、情報が古いかも・・・) コンパイラ次第なのですがVC++5.0(Visual studio97)では、 _mbsnicmp という関数がマルチバイトの文字比較となっているようですね。   <mbstring.h> を include してください。 ※ただし、実際に組んだ(使用した)わけではないので、この関数がお使いの環境で可能かどうか怪しいところではあります。 ちなみに、このバージョンのこのコンパイラ以外では、全く違う名前の関数で、この機能を実現しているかもしれません。 コンパイラの種類、バージョンを補足いただければ、分かる方が居るかもしれません。

  • sueoka
  • ベストアンサー率38% (24/62)
回答No.3

こんにちわ 「1文字ずつ参照して・・・」の部分は下の方のヒント(回答?)で良いと思います。 で、もう一つの方法(のヒント)を。 「ある文字で区切られたデータを分けて取得」の部分ですが、 「strchr」と言う関数と「strrchr」と言う関数があります。 ここで詳細や使用方法は説明しませんが(ヘルプを見てくださいね)、 これを上手く使うと一つ一つ調べる手間は省けます。 頑張ってください。

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.2

char line[20]; としてるのですよね。 1文字ずつでしたら、line[0]、line[1]、line[2]・・・line[19]と いった感じで(1)文字づつ参照できます。 気をつけなければならないのは、line[n]が0x00 の場合、そこで文字は最後です。 以降のデータは、内容が保証されませんので注意してください。 もうひとつ、ヒントとして、カンマ区切りのデータでしたら、 sscanfといった関数も便利かもしれません。 がんばってください。では。

  • Haizy
  • ベストアンサー率40% (404/988)
回答No.1

お疲れ様です。 配列変数ですね。さて、回答というか、ヒントです char line[20]; で、いいですかね?(char でも、int でも良いのですが)こう仮定して話します。 line[0] = 一文字目(1バイト目) line[1] = 二文字目(2バイト目) に格納されていますので、0、1を for文のカウンタを使用すれば、何文字目と言う感じで、扱えます。 でわでわ

yoro
質問者

補足

文字列に全角で「あ」と入っていたらどうですか? できませんよね? そういう場合にも対応したいのですが。

関連するQ&A