在Swift中计算元音

时间:2015-09-24 19:38:31

标签: swift swift2

我已经在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++
            }
    }

感谢大家的帮助和帖子,我正在把头发拉出来。

再次感谢

4 个答案:

答案 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