#はじめに
本記事では,C言語で競技プログラミング(主にAtCoder)に挑む場合の入力処理の方法についてまとめます.
さらに,入力したデータを変換したい(例えば,文字列→数字,など)場合の処理についてもまとめます.
もし,もっといい方法を知っている,とか,この入力の場合はどうすればいいですか,とかあればコメント等ください.
(出力はprintfするだけなので,まとめませんでした…)
#目次
#入力
##1行1列の数値の場合
###入力例
$N$
Nは数値
###実装例
int a;
scanf("%d", &a);
#####注意
scanfのとき,変数の前に&をつけるのを忘れないように
小数入力の場合は,int→float, %d→%fに変えること.
##1行複数列の数値の場合
###入力例
$N$
$a_0\quad a_1\quad\dots\quad a_N$
Nは数列$a$の長さ
###実装例
int n, a[100];
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
#####注意
&を忘れない
##1行1列の文字の場合
###入力例
$C$
Cは1文字(例えば'a'など)
###実装例
char c;
scanf("%c", &c);
#####注意
文字の場合は,%cを使う
文字列の場合とは異なるので注意
##1行の文字列の場合
###入力例
S
Sは文字列("abcd", "efg123"など)
###実装例
char s[101];
scanf("%s", s);
#####注意
文字列の場合は,&はいらない!!
文字列を入れる配列の長さは,文字の最大長さ+1にする必要がある(文字列は,最後に終端文字\0が入るため)
##複数行の場合
基本は1行の場合と同じで,for文で回して読みこんでいこう!!
#変換
##文字列の長さを調べる
###やりたいこと
文字列S = "abc" が与えられたとき,その長さ3を得たい
###実装例
#include <string.h>
をしたのち,例えば配列sの長さを調べたい場合は,
n = strlen(s);
のように,strlen関数を用いると,文字列の長さnを得られる.
##文字から数字への変換
###やりたいこと
文字を数字に変換したい.
例えば,char型の’3’をint型の3に変換したい
###実装例1
int a;
scanf("%c", &a);
a -= '0';
文字を計算する場合,文字コードを数値として考えて計算することになる.
’0’から’9’までの文字コードは連番なので,'0'の文字コードを引いてあげると,文字’0’は0,文字’1’は1,...と数値が得られる.
###実装例2
int d;
char n_list[] = {'0','1','2','3','4','5','6','7','8','9'}, a;
scanf("%c", &a);
for(int i = 0; i < 10; i++){
if(n_list[i] == a){
d = i;
break;
}
}
のように愚直に変換する方法もある.