問題
文字列 S と文字 c が与えられるので、 c は S の何文字目に現れるかを調べてください。
考え方
「文字列から何番目」という操作はC言語ほど簡単にはいかないので、いくつかのメソッドを組み合わせる必要がある。
基本的には
firstIndex(of:) などを使うが、最終的な結果は
Int 型にする必要があるので、それなりの操作は必要。
よく使う手法ではあるので、extension を作っておくと便利かもしれない。
解答例
import Foundation の行は必要となるので注意。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Foundation extension String { func encodedOffset(of string: String) -> Int? { return range(of: string)?.lowerBound.utf16Offset(in: self) } } let s1 = readLine()! let s2 = readLine()! let index = s1.encodedOffset(of: s2)! + 1 print(index) |
あるいは
1 2 3 4 5 6 7 8 9 |
let s1 = readLine()! let s2 = readLine()! for (index, s) in s1.enumerated() { if s == Character(s2) { print(index + 1) break } } |
s2 は String 型のため、比較のためには Character 型にしなければいけない点に注意。
参考文献
- How to convert “Index” to type “Int” in Swift?
- 以下の記事の「文字(文字列)の出力位置(要素番号)の取得」を参照(上記記事の改変)