ページ 11

入力した文字列から値をそれぞれ取得

Posted: 2015年6月10日(水) 01:47
by あしか
おはようございます。
以前質問させていただいたものです。
返事をできず、日が空いてしまい申し訳ございません。
もう一度、質問させてもらいます。

最初のコード(6文字の数値)と そのあとに a5 b10 c15 ←(順不動で後ろの値をそれぞれ保存して使用したい)

123456 a10 b20 c15  or 456123 b a c  or 654321 c b a 等
gets等で入力して行う。
strncmpを使って作成。 お願いします。

ソースに起こせない理由は、空白の処理でエラーがでてしまうのと、
空白で区切って、aの値 bの値 cの値をそれぞれ空白の後ろのaかbかcか判定して、その値をそれぞれ保存する部分です。

Re: 入力した文字列から値をそれぞれ取得

Posted: 2015年6月10日(水) 01:58
by みけCAT
あしか さんが書きました:以前質問させていただいたものです。
返事をできず、日が空いてしまい申し訳ございません。
もう一度、質問させてもらいます。
申し訳ないと思うのなら、質問する前にまず返事をしたらどうですか?
文字列から空白までの情報を取得 • C言語交流フォーラム ~ mixC++ ~
【追記】
前のトピックはログインしないと返信できなくなっている(?)ようなので、返事をこのトピックで書くといいかもしれません。
あしか さんが書きました:最初のコード(6文字の数値)と そのあとに a5 b10 c15 ←(順不動で後ろの値をそれぞれ保存して使用したい)

123456 a10 b20 c15  or 456123 b a c  or 654321 c b a 等
gets等で入力して行う。
strncmpを使って作成。 お願いします。
もしも課題の丸投げであるならば、禁止事項です。

Re: 入力した文字列から値をそれぞれ取得

Posted: 2015年6月12日(金) 02:18
by かずま
あしか さんが書きました: 最初のコード(6文字の数値)と そのあとに a5 b10 c15 ←(順不動で後ろの値をそれぞれ保存して使用したい)

123456 a10 b20 c15  or 456123 b a c  or 654321 c b a 等
a や b の後に数字が来ないこともあるんですね。その場合は 0 と解釈するんでしょうか?
前回の例には cc12 というのがありましたが、a, b, c は 1文字だけなんですよね。
あしか さんが書きました: ソースに起こせない理由は、空白の処理でエラーがでてしまうのと、
空白で区切って、aの値 bの値 cの値をそれぞれ空白の後ろのaかbかcか判定して、その値をそれぞれ保存する部分です。
ソースに起こせないのに、エラーが出るんですか?
どんなエラーですか?
おそらく、エラーが出るソースは書けたけれど、正しいソースが書けない
という意味ですよね。それなら、エラーが出るソースを添付してください。
そうすれば丸投げではありません。

次のコードは strncmp を使っていないので、課題の解答にはならないと
思いますが、参考になるところがあるんじゃないでしょうか?

コード:

#include <stdio.h>  // fgets, printf
#include <stdlib.h> // atoi
#include <string.h> // strchr

int main(void)
{
    int n, a, b, c;
    char buf[256];
    while (fgets(buf, sizeof buf, stdin)) {
        n = atoi(buf);
        a = atoi(strchr(buf, 'a') + 1);
        b = atoi(strchr(buf, 'b') + 1);
        c = atoi(strchr(buf, 'c') + 1);
        printf("  n=%d, a=%d, b=%d, c=%d\n", n, a, b, c);
    }
    return 0;
}