Open15

競技プログラミングメモ(Swift)

ヨシカワヨシカワ

整数を受け取る

let n = Int(readLine()!)!

文字列を受け取る

let s = readLine()!
ヨシカワヨシカワ

ifの基本形

文字列nameが"Swift"であれば文字列"Hello Swift"を表示する。"Kotlin"であれば文字列"Hello Kotlin"を表示する。そうでなければ文字列"Goodbye"を表示する。

let name = "Swift"

if name == "Swift" {
    print("Hello Swift")
} else if name == "Kotlin" {
    print("Hello Kotlin")
} else {
    print("Goodbye")
}
// Hello Swift
ヨシカワヨシカワ

文字列を1文字ずつ分割して配列にする

文字列"Hello world"を1文字ずつ分割して配列にする

let array = Array("Hello world")
print(array)
// ["H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]

分割後の配列の要素は文字列型に見えるが、実際はCharacter型という文字型である。
要素を文字列と結合するときはString()を使って文字列に変換する必要がある。

ヨシカワヨシカワ

for-in文で配列内の要素を先頭から順に処理する

配列arrayの要素を先頭から順に表示する。

var array = [1,2,3,4,5,6]

for i in array {
    print(i)
}
// 1
// 2
// 3
// 4
// 5
// 6

for-in文で配列内の要素を末尾から順に処理する

var array = [1,2,3,4,5,6]

for i in array.reversed() {
    print(i)
}
// 6
// 5
// 4
// 3
// 2
// 1
ヨシカワヨシカワ

大文字を小文字に変換

文字列"abc"を大文字に変換する

let s1 = "abc"
print(s1.uppercased())
// ABC

小文字を大文字に変換

文字列"ABC"を小文字に変換する

let s2 = "ABC"
print(s2.lowercased())
// abc
ヨシカワヨシカワ

半角スペースで区切られた数値を受け取る

以下の入力を受け取る。数値はInt型で受けとる。
12 34 56 78 90

let values = readLine()!.split(separator: " ").map { Int($0)! }
// [12, 34, 56, 78, 90]

半角スペースで区切られた文字列を受け取る

以下の入力を受け取る。
hogehoge hugahuga kokekokko

let values = readLine()!.split(separator: " ").map { String($0) }
// ["hogehoge", "hugahuga", "kokekokko"]
ヨシカワヨシカワ

文字列の前から指定した文字数分だけ文字列を切り出す

文字列"ABCDEFG"の先頭5文字を切り出す。

let s1 = "ABCDEFG"
print(s1.prefix(5))
// ABCDE

文字列の後から指定した文字数分だけ文字列を切り出す

文字列"ABCDEFG"の後ろから5文字を切り出す。

let s2 = "ABCDEFG"
print(s2.suffix(5))
// CDEFG
ヨシカワヨシカワ

累乗を計算するpow関数の使い方

pow関数は第1引数に基数、第2引数に指数を指定する。
下記のコードの場合、pow関数はvalueをn乗した値を返す。

pow(value,n)

また、pow関数を使用するときはFoundationフレームワークをimportする必要がある。

import Foundation

print( pow(2,3) )
// 8
ヨシカワヨシカワ

先頭からN文字の文字列を切り出す

文字列"Swift入門"の先頭から5文字を切り出す。

let s = "Swift入門"
let start = s.startIndex
let end = s.index(start, offsetBy: 4)
let answer = s[start...end]
 
print(answer)
  1. String.startIndexで最初の文字の位置を取得
  2. String.index(_ :offsetBy:)メソッドで最初の文字の位置からN文字右の文字の位置を取得
  3. String[fromIdx...toIdx]で特定の範囲の文字列を切り出す
ヨシカワヨシカワ

改行なしの標準出力

print関数にはterminatorという引数があり、第1引数に渡した値を出力した後にterminatorに渡した値を出力する。defaultでは"\n"になっている。

for i in 0..<3 {
    print("hoge", terminator: "")
}
//hogehogehoge
ヨシカワヨシカワ

任意の文字列が含まれているか判定する

文字列"hogehuga"に文字列"huga"が含まれているか判定する。

import Foundation

var s = "hogehuga"
if s.contains("huga") {
    print(s.prefix(s.count - 4))    //文字列の末尾から4文字を削除する
}
//hoge
ヨシカワヨシカワ

10進数を2進数、8進数、16進数に変換

数値13を2進数、8進数、16新数に変換する。

var n = 13
let n2 = String(n, radix: 2)    //2進数に変換する
let n8 = String(n, radix: 8)    //8進数に変換する
let n16 = String(n, radix: 16)  //16進数に変換する
print(n2)    //1101
print(n8)    //15
print(n16)   //d