このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の文字列処理メニューから「i 文字目の出力 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
文字列 S と整数 i が与えられるので、 S の i 文字目を出力してください。
考え方
Swiftだと、C言語とは違い、 str[3] のようにして文字列中の任意の文字を得ることはできない。
String型の添字(Subscript)は
String.Index 型なので、
Int 型をそのまま指定することはできない。
従って、
index(_:offsetBy:) を使って目的とする場所の添字を
String.Index 型で取得しなければならない。
もう一つの方法は、入力された文字列を分解し、「文字の配列」とする方法。もしかしたらこっちの方が汎用性があるかもしれない。
解答例
この問題の場合、表示させたい文字の位置は、文字列の先頭を 1 として定義しているため、 String.Index の値は -1 しなければならない点に注意。
1 2 3 4 |
let s = readLine()! let i = Int(readLine()!)! let index = s.index(s.startIndex, offsetBy: i - 1) print(s[index]) |
入力文字列を文字の配列にするのであれば、このような感じ。
1 2 3 4 5 6 7 |
// 入力された文字列を、文字の配列に変換する let s = readLine()!.map { String($0) } // 出力させたい文字の添字(1からはじまるので注意) let i = Int(readLine()!)! print(s[i - 1]) |
1 2 3 4 5 6 7 |
let str = readLine()! let i = Int(readLine()!)! for (index, s) in str.enumerated() { if index == i - 1{ print(s) } } |