{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:のあとに " " のように半角スペースを指定すれば、半角スペースをその区切りとして認識して、区切りごとに配列の要素として順に格納される。