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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あしか

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

#1

投稿記事 by あしか » 10年前

おはようございます。
C言語初心者です。

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

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

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

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

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

だんごさん
記事: 273
登録日時: 13年前

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

#2

投稿記事 by だんごさん » 10年前

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 10年前

だんごさん さんが書きました:単純に情報の数が明確であるならばscanf("%d%d%d%d",...)で取得できると思いますが
今回は十進法の数字でない文字を含むので、%dではなくて%sを用いなければなりません。
十進法の数字の前につく文字がa,b,c,d,e,fのいずれかだけであるならば、%xでもいいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

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

#4

投稿記事 by かずま » 10年前

もっとたくさんの入力例を挙げてください。
入力行のパターンの厳密な定義でもかまいません。
とりあえず、これでどうでしょうか?

コード:

#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;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 10年前

あしか さんが書きました:C言語初心者です。
ではC言語を使わない、というのはどうでしょうか?
例えばPerlの正規表現で取得するとか。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る