13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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;
    }
}

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

13
11
2

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
  3. You can use dark theme
What you can do with signing up
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?