開発環境
- OS X Mavericks - Apple(OS)
- Xcode 6.0 Beta
- Swift (プログラミング言語)
Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の2.5章(文字列: 文字列理論)、プールパズル(p.90)をSwiftで考えてみる。
プールパズル(p.90)
コード(Xcode)
string.swift
//
// string.swift
// string
//
// Created by kamimura on 8/10/14.
// Copyright (c) 2014 kamimura. All rights reserved.
//
import Foundation
extension String {
var swapcaseString:String {
var result: String = ""
for ch in self {
let s = String(ch)
result += s.uppercaseString == s ? s.lowercaseString : s.uppercaseString
}
return result
}
var isUpper:Bool { return self.uppercaseString == self }
var isLower:Bool { return self.lowercaseString == self }
func count(sub:String) -> Int {
var result:Int = 0
var s = self
let index:String.Index = "a".endIndex
while s != "" {
if s.hasPrefix(sub) {
result += 1
s = s.substringFromIndex(sub.endIndex)
} else {
s = s.substringFromIndex(index)
}
}
return result
}
func find(sub:String, start:Int = 0, end:Int? = nil) -> Int {
var s = self as NSString
var s_temp = s.substringFromIndex(start)
let end_temp:Int = end ? end! : s.length
for i in start..<end_temp {
if (s_temp.hasPrefix(sub)) {
return i
}
s_temp = s.substringFromIndex(i + 1) as NSString
}
return -1
}
func replace(old_str:String, new_str:String) -> String {
return self.stringByReplacingOccurrencesOfString(old_str, withString: new_str)
}
func strip() -> String {
return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
}
func slice(start:Int=0, end:Int?=nil) -> String {
let s = self as NSString
var new_end:Int
if (end) {
new_end = end!
} else {
new_end = s.length
}
return s.substringWithRange(NSRange(location: start, length:new_end - start))
}
}
main.swift
//
// main.swift
// sample90
//
// Created by kamimura on 8/15/14.
// Copyright (c) 2014 kamimura. All rights reserved.
//
import Foundation
let tracks:[String] = [
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima"
]
func findTrack(search_for:String) {
for i in 0..<tracks.count {
if tracks[i].find(search_for) != -1 {
println("曲番号\(i): \(tracks[i])")
}
}
}
// 標準入力(STDIN)から読み込む
func input(msg:String = "") -> String {
print(msg)
var in_fh = NSFileHandle.fileHandleWithStandardInput()
var data = in_fh.availableData
var s = NSString(data: data, encoding: NSUTF8StringEncoding)
s = s.substringToIndex(s.length - 1)
return s
}
while true {
print("曲名の一部を入力: ")
let search_for = input()
if search_for == "q" {
break
}
findTrack(search_for)
}
入出力結果(Console Output)
曲名の一部を入力: left 曲番号0: I left my heart in Harvard Med School 曲名の一部を入力: - 曲番号1: Newark, Newark - a wonderful town 曲名の一部を入力: with 曲番号2: Dancing with a Dork 曲名の一部を入力: to 曲番号1: Newark, Newark - a wonderful town 曲番号3: From here to maternity 曲名の一部を入力: abcde 曲名の一部を入力: q Program ended with exit code: 0
0 コメント:
コメントを投稿