LoginSignup
7

More than 3 years have passed since last update.

C言語で競技プログラミング(AtCoder)に挑む場合の入力・変換まとめ

Last updated at Posted at 2020-08-12

はじめに

本記事では,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;
    }
}

のように愚直に変換する方法もある.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7