質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

2635閲覧

【C言語】入力した文字の分割について

ryukku3555

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/11/24 02:56

編集2016/11/24 04:21

###前提・実現したいこと
scanfで7:00と入力した場合、
a[0]には7、a[1]には00、と入れたい。

a[0]に7を入れることはできたのですがそのあとの方法が分からずでございます。

###該当のソースコード

int main(void) { char a[10]; char tok; char s2[] = ":"; printf("出発時間は何時ですか?"); scanf("%s", a); tok = *strtok( a, s2 ); printf("%s\n",a); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2016/11/24 03:17

man strtokに使い方が書いてありますが、読まずに聞いていますか?読んでも分からないのですか?
Y.H.

2016/11/24 03:36

C言語の質問のようですが Swift , Swift 2 , Objective-C のタグは関係ありますか?
ryukku3555

2016/11/24 04:22

Y.H.さん 私のタグの付けミスで申し訳ございません。修正させていただきました。
guest

回答3

0

a[0]には7、a[1]には00、と入れたい。

との事ですが a[1]strtok( a, s2 );の実行で'\0'に置き換えられているのでこれは無理です。
strtok() は入力となる文字列へ変更を加えます。strtok()の第2引数で指定された文字に該当するものを'\0'へ変更します。

以下のように時("7")と分("00")を格納する別の変数(文字配列)を定義しこれに格納するようにしましょう。
※ コメントに記載している動作をするコードを/* ここにコードを記述 */ の部分に記述するとできると思います。

C

1char inputString[10] = "7:00"; 2char separators[] = ":"; 3 4//分割結果を格納する文字配列変数 5char hour[3] = ""; 6char min[3] = ""; 7 8// strtok()を使用して a[]の文字列をseparatorsの文字で分割した最初の文字列へのPointerを取得 9 /* ここにコードを記述 */ 10// 最初の文字列へのPointer から hourへ文字列をコピー 11 /* ここにコードを記述 */ 12 13// strtok()を使用して前回のstrtok()の続きから分割 14// (2つ目の分割結果の文字列へのPointerを取得 15 /* ここにコードを記述 */ 16 17// 2つ目の分割結果の文字列へのPointer から minへ文字列をコピー 18 /* ここにコードを記述 */ 19 20// hour/minを標準出力へ出力する 21printf("hour = %s\n", hour); 22printf("min = %s\n", min);

投稿2016/11/24 03:34

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryukku3555

2016/11/24 04:20

ご回答ありがとうございます。 わかりやすく記述していただき助かります。 試させていただきます。
ryukku3555

2016/11/24 04:37

上記のコードでも無事解決できました。ありがとうございます。
guest

0

ベストアンサー

こんにちは。

aはchar型の配列なので、a[0], a[1]共に1文字しか入りません。
従って、a[1]に00の2文字を入れることはできないです。
例えば下記でできますよ。

C

1int hour, min; 2scanf("%d:%d", &hour, &min);

投稿2016/11/24 03:47

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryukku3555

2016/11/24 04:09

ご回答ありがとうございます。 試させていただきましたがprintfで確認したところ00と打ち込んだ際に0と表示されてしまうようです。
Chironian

2016/11/24 04:12 編集

%dではなく%02dで出力すれば00になりますよ。 ああ、すいません。もし、文字列のまま処理されたいのでしたら、私の案は外れてます。 これは数値へ変換して処理する方法です。
ryukku3555

2016/11/24 04:36

Chironianさんこんなくだらない質問いお付き合いいただきありがとうございます。
guest

0

下記のサンプルを参照してみましょう

http://www9.plala.or.jp/sgwr-t/lib/strtok.html

投稿2016/11/24 03:31

nagaetty

総合スコア1106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryukku3555

2016/11/24 04:20

ご回答ありがとうございます。 参考のサイトありがとうございます。 拝見しながら頑張りたいと思います。
ryukku3555

2016/11/24 04:37

サイトを見ながら試させていただきました。 問題なく動作することができました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問