C言語でinput for Paiza

Paizaのプログラミングスキルチェックというサービスがあります。

ITプログラマー・エンジニア転職のpaiza転職

競技プログラミングのような問題を様々な言語で解くことができるのでとても良い勉強になります。 しかし、スコアを出すためには制限時間内に問題を解かなくてはなりません。
色々な言語を使ってやっていると毎回「あれ? inputどうやってやるんだっけ?」ということに陥ってそこで無駄に時間を過ごしてしまいます。

なので今回はC言語で簡単にPaizaなどで使えるようなinputの方法をメモしておきました。

How to input

scanf("%d",&n);

nに数値を入れる.

char str[10];
scanf("%s",str);

文字列をstrに入れる.

数値の分割

scanfでinputするときにできる. , で区切られたデータが入ってくるときは

int a,b,c;
scanf("%d,%d,%d",a,b,c);

でよい。inputがスペースで区切られているなら(delimiterがスペースなら)スペースで区切ろう。

文字列の分割

char str[10], *token, *token2;
scanf("%s", str);
token1 = strtok(str,",");
token2 = strtok(NULL, ",");

strok() について

参考:http://www9.plala.or.jp/sgwr-t/lib/strtok.html 書式

#include<string.h>
char *strok(char *s1, const char *s2);

分解対象文字列s1を, 文字群s2中の文字を区切りに字句(トークン)に分解。 使うには次の手順を用いる。

  • 最初の呼び出しではs1には分解対象の文字列を指定。トークンがあればstrtok()はトークンへのポインタを返却。
  • 2回目以降の呼び出しではs1にNULLを指定。分解できるトークンがあるうちはstrok()はトークンへのポインタを返却。
  • トークンがなくなるとstrok()はNULLを返却。

つまり一度呼び出すと最初の区切り点で区切った単語の先頭のポインタを返す。もう一度呼び出すと次の単語のポインタを返す。 これを繰り返すことで次々と単語のポインタが返ってくる。 次の単語がなければNULLが返ってくる。 注意として、strtok()の引数のs1にはdelimitterの部分が\0に置換されてしまうので変更したくない文字を使ってはいけない。