このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の文字列処理メニューから「文字列の挿入 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
文字列 S , T と、整数 N が与えられるので、 S の N 文字目の後ろに T を挿入した文字列を出力してください。
入力される値
1 2 3 |
S T N |
期待する出力
S の N 文字目の後ろに T を挿入した文字列を 1 行で出力してください。
考え方
Swiftにおける文字列は、C 言語の文字列と違い、文字単位でインデックス指定するのがやや厄介となる。
したがって、ここでは文字列
T を挿入される文字列
S を文字単位に分解し、文字の配列として一旦作り替える。
たとえば、文字列を str とするとき、文字の配列に変換するには
map を使う。例えば次のような感じになる。
1 |
let s = str.map { String($0) } |
このようにすることで、 "ABC" だった文字列は ["A", "B", "C"] という文字(正確には1文字だけの文字列)の配列にすることが可能となる。
その作り替えた文字の配列に対し、 insert(_:at:) メソッドを使い、指定された文字列 T を挿入する。
挿入された文字列は、文字の配列になっているため、最後に joined() を使い連結して出力する。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 全ての行を一気に取り込む let sa = Array(AnyIterator { readLine() }).map{ String($0) } // 挿入される文字を文字の配列にする var s = sa[0].map { String($0) } // 挿入する文字列 let t = sa[1] // 挿入する場所 let n = Int(sa[2])! // n 番目に文字列を挿入 s.insert(t, at: n) // 文字列の配列を連結して出力する print(s.joined()) |