ページ 11

文字列から空白までの情報を取得

Posted: 2015年6月05日(金) 07:25
by あしか
おはようございます。
C言語初心者です。

問題の中で行き詰った部分があるので質問させてください。

問題の中で、1行の文字列で入力してその中から情報を取り出して使わなけばいけない、のですが、
例 12345空白a10空白b11空白cc12 リターン
と入力して、
最初の空白までの12345をどこかに保存。

その後ろのa、b、cの後ろの空白までに入っている数値を取得して保存したい。

のですが、どうすればいいでしょうか。

isspaceやstrtokなどを使うのかなと、調べながら考えてたのですが、
ソースに起こせないので質問させていただきました。

Re: 文字列から空白までの情報を取得

Posted: 2015年6月05日(金) 10:10
by だんごさん
単純に情報の数が明確であるならばscanf("%d%d%d%d",...)で取得できると思いますが、
情報の数が明確でないのであれば、一回文字列化して空白の数を調べて配列変数を作り、strtokでNULL以外だった場合atoiで数値にする…などでしょうか…

ただ色々方法はあると思うのでこれが一番いいとは言い切れないと思いますし、エラー処理もきちんと行わないといけません

Re: 文字列から空白までの情報を取得

Posted: 2015年6月05日(金) 12:51
by みけCAT
だんごさん さんが書きました:単純に情報の数が明確であるならばscanf("%d%d%d%d",...)で取得できると思いますが
今回は十進法の数字でない文字を含むので、%dではなくて%sを用いなければなりません。
十進法の数字の前につく文字がa,b,c,d,e,fのいずれかだけであるならば、%xでもいいかもしれません。

Re: 文字列から空白までの情報を取得

Posted: 2015年6月05日(金) 13:22
by かずま
もっとたくさんの入力例を挙げてください。
入力行のパターンの厳密な定義でもかまいません。
とりあえず、これでどうでしょうか?

コード:

#include <stdio.h>

int main(void)
{
    int v0, v1, v2, v3;
    char line[] = "12345 a10 b11 cc12\n";
    int n = sscanf(line, "%d %*[abc]%d %*[abc]%d %*[abc]%d", &v0, &v1, &v2, &v3);
    printf("n=%d, v0=%d, v1=%d, v2=%d, v3=%d\n", n, v0, v1, v2, v3);
    return 0;
}

Re: 文字列から空白までの情報を取得

Posted: 2015年6月05日(金) 13:39
by みけCAT
あしか さんが書きました:C言語初心者です。
ではC言語を使わない、というのはどうでしょうか?
例えばPerlの正規表現で取得するとか。