{Swift} paizaでの標準入力の受け取り方

paizaで与えられる文字列をどうやって使えばいいかわからん人用。

この記事の目次
・基本的な受け取り方
・複数行入力される時
・スペース区切りで入力される時

基本的な受け取り方

let input_line=readLine()!
print("XXXXXX")

とりあえず言語でSwiftを選んだらこんなコードが出てくる。
この readLine()! が標準入力を受け取る合図みたいなもの。

仮に標準入力で与えられるのが "hoge" だった場合、

let x = readLine()! // xに"hoge"が代入される
print(x) // "hoge"

となる。終わり。

複数行入力されるとき。

問題によって入力が複数回行われる時がある。

入力される値
入力は以下のフォーマットで与えられます。
c_1
c_2
入力は 2 行となり末尾に改行が入ります。

一例としてはこんな感じで書かれていることが多い。

これは単純に1回目のreadLine()!では1行目
2回目のreadLine()!では2行目が受け取られる

仮に2行入力され、1行目が"one"、2行目が"two"だった場合、

let x = readLine()! // xに"one"が代入される
let y = readLine()! // yに"two"が代入される
print(x) // "one"
print(y) // "two"

となる。要は入力される回数だけreadLine()!を繰り返せばいい。

つまり3回入力されるなら

var strs = [String]() // 標準入力を受け取る用の空の配列を定義
for i in 0..<3 {
    strs.append(readLine()!) // .appendで配列の要素を追加しつつ標準入力を取得
}

print(strs) // ["one", "two", "three"]

て感じでループ内で取得して配列に格納することもできる。
ただ受け取る入力がそれぞれ違った種類の情報のときは

let time = readLine()! // 15
let place = readLine()! // "cafe"
let occasion = readLine()! // "hungry"

と、一つずつ変数に入れるべきだと思う。

スペース区切りで入力されるとき。

一行で値を複数入力してくる問題もある。

入力される値
入力は以下のフォーマットで与えられます。
c_1 h_1
1 行目には文字列Aと文字列Bが半角スペース区切りで与えられます。

こんな感じで。 仮に"Tanaka" "Suzuki"の二つの文字列が与えられる場合、

let x = readLine()! // xに"Tanaka Suzuki"が代入される
print(x) // "Tanaka Suzuki"

となる。単純に1つの文字列として入力されるが、大抵"Tanaka"と"Suzuki"は別々に使いたいと思う。そんな時は

import Foundation //これ付けないと動かない

let strs = readLine()!.components(separatedBy: " ") // " "がある所で区切って格納する
print(strs) // ["Tanaka", "Suzuki"] //配列として扱えるようになる
print(strs[0]) // "Tanaka"
print(strs[1]) // "Suzuki"

readLine()!の後に .components(separatedBy: " ") を足せば解決できる。
separatedBy:のあとに " " のように半角スペースを指定すれば、半角スペースをその区切りとして認識して、区切りごとに配列の要素として順に格納される。