我已经在Java和C ++中成功完成了这项工作,但无法在Swift中解决这个问题。这是我的C ++代码:
int count_vowels (string input)
{
int position = 0;
for (int i = 0; i < input.length(); i++)
{
char ch;
ch = input[i];
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'){
position++;
}
}
return position;
}
我再次尝试迭代字符串,计算if语句中的值并返回位置(有多少)。
有没有办法将其转换为swift语法。
我明白了:
for vowels.characters {
if char == ("a") || char == ("e") || char == ("i") || char == ("o") || char == ("u") {
count++
}
}
感谢大家的帮助和帖子,我正在把头发拉出来。
再次感谢
答案 0 :(得分:3)
免责声明:我不知道斯威夫特,但......
您应该能够使用Swift的更高级别功能来更简洁地完成此任务。例如,元音字符在您的函数中不会改变,因此它们可以表示为Swift Set:
var vowelCount = 0
var vowels = Set(["a", "e", "i", "o", "u"])
然后测试每个输入字符是否是集合的成员,如果是,则递增计数:
for ch in input {
if (vowels.contains(ch)) {
vowelCount += 1
}
}
答案 1 :(得分:2)
我同意你应该展示你在Swift中尝试过的东西,这样我们就可以解决的问题提供指导。话虽这么说,我做了一个快速转换。它可能不是最好的,但是你去了
import Cocoa
let vowels: [Character] = ["a", "e", "i", "o", "u"]
func count_vowels(input: String) -> Int {
var vowelCount: Int = 0
for ch in input.lowercaseString.characters {
if (vowels.contains(ch)) {
vowelCount++
}
}
return vowelCount
}
有了这个,print(count_vowels("Hello world"))
打印出3
编辑:
根据{{3}}修改了我的答案。它绝对摆脱了丑陋的if
语句,使代码更容易阅读。我在函数之外声明了元音列表,这样每次调用函数时都不会生成它。
答案 2 :(得分:1)
这会有用......但不是很好。
let str = "test voWeL COUNT"
let v = ["A","a","E","e","i","I","o","O","u","U"]
var vowels = 0;
for i in str.characters {
print(i)
if (v.contains("\(i)")) {
vowels++
}
}
print("Vowels \(vowels)")
答案 3 :(得分:1)
你可以这样做:
extension String {
var numberOfVowels: Int {
let vowels = "aeiou"
let vowelsSet = NSCharacterSet(charactersInString: vowels)
let strippedComponents = lowercaseString.componentsSeparatedByCharactersInSet(vowelsSet)
let stripped = strippedComponents.joinWithSeparator("")
return characters.count - stripped.characters.count
}
}
"Hello".numberOfVowels