如何在 Swift 中用大寫的字串制作元音?
我試過這個:
func makeVowelsUpperCase(sentence:String)-> String {
var result = String()
var vowels = "aeiou"
for i in vowels{
if sentence.contains(i){
result = sentence(i.uppercased())
}
}
return result }
makeVowelsUpperCase(word: "this is my house")
uj5u.com熱心網友回復:
有幾個問題正在發生:
for i in vowels您的for回圈正在迭代元音。在每個回圈體中,您可以根據它是否在句子中來選擇是否保留元音。這樣做的結果是,你的結果字串可以永遠只能是這樣的
"AEIOU","AIU"等(即,它只會長度0-5的字串,只包含這些元音的一些子集)sentence(i.uppercased())這部分只是沒有意義。sentence是 aString,但是通過在它上面使用括號,看起來您正在嘗試呼叫它,就好像它是一個函式(但它不是)。因此出現錯誤:“錯誤:呼叫中的引數標簽不正確(有'單詞:',預期為'句子:')”您正在
result回圈體中重新分配,這意味著您result只能包含一個字符。相反,您應該創建一個中間值,然后從那里附加到它。您嘗試呼叫的方式
makeVowelsUpperCase(引數標簽為word:)與其宣告的方式(引數標簽為)不匹配sentence:。
我想這就是你的想法:
func makeVowelsUpperCase(sentence: String) -> String {
var result = String()
let vowels = "aeiou"
for char in sentence {
if vowels.contains(char) {
result.append(char.uppercased())
} else {
result.append(char)
}
}
return result
}
makeVowelsUpperCase(sentence: "this is my house")
還有一些其他問題我要指出:
vowels被宣告為可變的(var而不是let)。為什么元音集是可變的?他們應該永遠只是"aeiou"(至少對于英語而言)。回圈變數被稱為
i,這對于作為某個陣列索引的回圈變數來說是常規的,但在這種情況下,它是一個Character.關鍵字標簽,
sentence有點誤導。沒有真正要求輸入是一個句子。它可以是一個詞,也可以是一個段落,一切都將照常進行。這個
for回圈只是實作了一個映射操作,其中輸入序列(輸入的字符)使用某種轉換(元音時為大寫)映射到輸出序列(輸出的潛在大寫字符)。這正是Array.map它的目的。這里只有一個問題。事實證明,在某些語言中,一個字符的大寫版本實際上可能是多個字符。考慮到這一點,
Character.uppercased()實際上并不回傳 aCharacter,而是回傳 aString。為了解決這個問題,我們需要使用
flatMap而不是map,這將具有連接這些作為每個字符大寫操作結果回傳的字串的效果。
這是我可能會糾正的方法:
func uppercaseVowels(_ input: String) -> String {
let vowels = "aeiou"
let newChars = input.flatMap { char in
vowels.contains(char) ? char.uppercased() : String(char)
}
return String(newChars)
}
print(uppercaseVowels("this is my house"))
uj5u.com熱心網友回復:
你可以試試
func makeVowelsUpperCase(_ sentence:String)-> String {
var result = sentence
let vowels = "aeiou"
vowels.forEach {
result = result.replacingOccurrences(of: "\($0)", with: "\($0)".uppercased())
}
return result
}
稱呼
let str = makeVowelsUpperCase("this is my house")
print(str) // thIs Is my hOUsE
uj5u.com熱心網友回復:
您可以使用如下簡單的代碼來完成:
var word : String = "this is my house "
var vowels = "aeiou"
let result = word.map { vowels.contains($0) ? String($0).uppercased() : String($0) }
.joined()
print(result)
輸出 :
thIs Is my hOUsE
在一個函式中:
func uppercaseVowels(_ input: String) -> String {
let result = input.map { vowels.contains($0) ? String($0).uppercased() : String($0) }
.joined()
return result
}
print(uppercaseVowels(word))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/371291.html
標籤:迅速
