2017-01-04 7 views
0

私はSwift(自己学習しようとする)にはかなり新しいです。文字列をパラメータとしてとり、最初の母音の前に子音があるかどうかを調べ、母音がある場合はそれを削除する関数を作成しようとしています。したがって、ユーザがマイケルとして自分の名前を入力すると、イーヤエルがプリントアウトします。試してみてくださいこの文字列を取り、最初の母音の前に子音を取り除く関数を書く方法

func shortNameForName(name: String) -> String { 
    let vowel = "aeiou" // Maybe add the 'y' 
    let shortName = name.lowercaseString 
    let firstLetter = shortName.[shortName.startIndex] 

    if vowel.rangeOfString(firstLetter) != nil { 
     shortName.remove(at: shortName.startIndex) 
    } 
    return shortName 
} 

PSを

func shortName(for name: String) -> String { 
    // regular expression for consonants (= not vowels) in the beginning 
    let regularExpression = "^[^aeiou]+" 

    guard let firstVowelRange = name.range(
     of: regularExpression, 
     options: [.caseInsensitive, .regularExpression], 
     range: nil 
    ) else { 
     return name 
    } 

    // if the reg exp matched something, remove it 
    return name.substring(from: firstVowelRange.upperBound) 
} 

print(shortName(for: "Michael")) 
print(shortName(for: "MMMichael")) 
+0

あなたはString.indexにいくつかのグーグルを行うことをお勧めします。最初の母音の位置にインデックスを関連付けることができます。その後、そのインデックスから文字列の最後まで部分文字列を取ります。 – BallpointBen

答えて

0

スウィフト3と正規表現を使用したシンプルなソリューションを書かれている

をテストしていません
0

スウィフト3

::私は

func shortNameForName(name: String) -> String { 

    let shortName = name.lowercaseString 
    let vowelSet = CharacterSet(charactersIn: "aeiou") 

    /* I know here i can create an if statement that basically states that if the first 
     character of the string does not contain the vowelset, remove it, but I don't know 
     the syntax/how to write it */ 

    return shortName 
} 

print(shortNameForName("Michael")) 
2

これは可能です。

func shortNameForName(name: String) -> String { 

    let charSet = CharacterSet(charactersIn: "aeiou") 

    if let index = name.lowercased().rangeOfCharacter(from: charSet)?.lowerBound { 
     return name.substring(from: index) 
    } 

    return "" 
} 

shortNameForName(name: "Michael") 
0

あなたはNSRegularExpressionを使用して、このような何かを書くことができます:

func shortNameForName(name: String) -> String { 

    let pattern = "^[^aeiou]+([aeiou])" 
    let regex = try! NSRegularExpression(pattern: pattern, options: .caseInsensitive) 
    let shortName = regex.stringByReplacingMatches(in: name, range: NSRange(0..<name.utf16.count), withTemplate: "$1") 
    return shortName //or `shortName.lowercased()` if you prefer 
} 

print(shortNameForName(name: "Michael")) //->ichael 
関連する問題