アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (6件)

お疲れ様です。



配列変数ですね。さて、回答というか、ヒントです

char line[20];
で、いいですかね?(char でも、int でも良いのですが)こう仮定して話します。

line[0] = 一文字目(1バイト目)
line[1] = 二文字目(2バイト目)

に格納されていますので、0、1を for文のカウンタを使用すれば、何文字目と言う感じで、扱えます。

でわでわ

この回答への補足

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

補足日時:2001/08/23 13:57
    • good
    • 0

char line[20];



としてるのですよね。

1文字ずつでしたら、line[0]、line[1]、line[2]・・・line[19]と
いった感じで(1)文字づつ参照できます。
気をつけなければならないのは、line[n]が0x00 の場合、そこで文字は最後です。
以降のデータは、内容が保証されませんので注意してください。

もうひとつ、ヒントとして、カンマ区切りのデータでしたら、
sscanfといった関数も便利かもしれません。

がんばってください。では。
    • good
    • 0

こんにちわ



「1文字ずつ参照して・・・」の部分は下の方のヒント(回答?)で良いと思います。

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

頑張ってください。
    • good
    • 0

こんにちは、ふたたび。


VCは、離れて久しいぞな(^^;

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

コンパイラの種類、バージョンを補足いただければ、分かる方が居るかもしれません。
    • good
    • 0

格納したあとに分割するという考え方でどうでしょうか?



int i;
char *p[20];

i=0;
p[i] = strtok(line, ",");
while(p[i]!=NULL){
p[i] = strtok(NULL, ",");
i++
}
    • good
    • 0

No5 の修正です。


インクリメントの場所を間違ってました。

int i;
char *p[20];

i=0;
p[i] = strtok(line, ",");
while(p[i]!=NULL){
i++;
p[i] = strtok(NULL, ",");
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/23 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!