Ios 辅音和元音
我是Swift的新手,有人能解释一下为什么我总是遇到这个问题吗。我使用的是Xcode 6.4,但这里有一个问题,我希望我能解决它,但我需要我的函数来接收大字符串,然后返回元组(numowels,numConsonants) 计算以辅音/元音开头的单词数 返回元组并打印函数调用的结果。 我不需要它计算字符,只需要每个单词的第一个字符。我创建了一个for循环,它将所有内容切换为小写。但现在我被卡住了Ios 辅音和元音,ios,swift,swift2,swift-playground,Ios,Swift,Swift2,Swift Playground,我是Swift的新手,有人能解释一下为什么我总是遇到这个问题吗。我使用的是Xcode 6.4,但这里有一个问题,我希望我能解决它,但我需要我的函数来接收大字符串,然后返回元组(numowels,numConsonants) 计算以辅音/元音开头的单词数 返回元组并打印函数调用的结果。 我不需要它计算字符,只需要每个单词的第一个字符。我创建了一个for循环,它将所有内容切换为小写。但现在我被卡住了 func count(string: String) -> (Vowels:Int, Cons
func count(string: String) -> (Vowels:Int, Consonants:Int) {
var Vowels = 0, Consonants = 0
for character in string {
switch String(character).lowercaseString {
case "a","e","i","o","u":
++Vowels
case "b","c","d","e","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
++Consonants
default: break
}
}
return (Vowels, Consonants)
}
问题在于您为方法选择的名称。试试除计数之外的任何名字,你应该会没事的 编辑/更新:Swift 4
func countCharacteres(_ string: String) -> (vowels: Int, consonants: Int) {
var vowels = 0, consonants = 0
for character in string {
switch String(character).lowercased() {
case "a","e","i","o","u":
vowels += 1
case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
consonants += 1
default:
break
}
}
return (vowels, consonants)
}
如果只想计算每个单词的第一个字母,则需要将字符串拆分为一个单词数组,并提取每个第一个字母的小写字母,如下所示:
extension StringProtocol where Index == String.Index {
var range: Range<Index> { return startIndex..<endIndex }
var words: [String] {
var words: [String] = []
enumerateSubstrings(in: range, options: .byWords) { word, _, _, _ in words.append(word!) }
return words
}
}
extension StringProtocol where Index == String.Index {
var firstCharacterCount: (vowels: Int, consonants: Int) {
var vowels = 0, consonants = 0
for first in words.compactMap({$0.lowercased().first}) {
switch first {
case "a","e","i","o","u":
vowels += 1
case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
consonants += 1
default: break
}
}
return (vowels, consonants)
}
}
请注意,扩展名应放在项目内的新Swift文件中。如果使用Swift 2: 换一行就行了
for character in string {
到
这样就行了
count("hello") // (.0 2, .1 3)
另一种选择是使用正则表达式检索每个单词的第一个字母。
\b
选项用于查找单词边界,\w
是单个单词字符。因此,一旦您避开后斜杠,\\b\\w
将捕获紧跟在单词边界之后的第一个字母(也称为每个单词的第一个字母):
--
如果要处理重音字符(如“étude”),可能需要先删除这些变音符号:
func countLetters(string: String) -> (vowels: Int, consonants: Int) {
let convertedString = NSMutableString(string: string)
CFStringTransform(convertedString, nil, kCFStringTransformStripCombiningMarks, Boolean(0))
var vowels = 0, consonants = 0
let regex = NSRegularExpression(pattern: "\\b\\w", options: nil, error: nil)
regex?.enumerateMatchesInString(convertedString as String, options: nil, range: NSMakeRange(0, convertedString.length)) { matches, flags, stop in
switch convertedString.substringWithRange(matches.range).lowercaseString {
case "a","e","i","o","u":
++vowels
case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
++consonants
default: break
}
}
return (vowels, consonants)
}
您是否在XCode 7 beta 5中使用swift 2?我在XCode中使用swift从目前提供的答案来看,我认为没有人正确理解您的问题。请澄清。请给出一个输入示例,您从输出中得到了什么,以及您对输出的期望值。您能澄清一下您到底想做什么吗?@JetLagg请将这些澄清整合到原始问题中。单击问题下方的“编辑”,然后更新原始问题。我读到他的问题时说“我正在统计所有字母的数量,我只想要每个单词的第一个字母。”我想你回答的是另一个问题。@Rob你是对的。但他仍然需要为他的方法选择另一个名称。也许这是他的主要问题别误会我:我同意他最好改名。这与问题无关,伊姆霍。事实上没有@LeoDabus,看我的答案。但问题仍然不够清楚。谢谢大家,这就是我需要将字符串和单词数组@LyndseyScott,LeoDabusThis分解成的内容。这是正确的,如果他想将其转换为Swift 2,他会这样做。但我认为这不是当前的问题。
for character in string.characters {
count("hello") // (.0 2, .1 3)
func countLetters(string: String) -> (vowels: Int, consonants: Int) {
var vowels = 0, consonants = 0
let regex = NSRegularExpression(pattern: "\\b\\w", options: nil, error: nil)
regex?.enumerateMatchesInString(string, options: nil, range: NSMakeRange(0, count(string))) { matches, flags, stop in
switch (string as NSString).substringWithRange(matches.range).lowercaseString {
case "a","e","i","o","u":
++vowels
case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
++consonants
default: break
}
}
return (vowels, consonants)
}
func countLetters(string: String) -> (vowels: Int, consonants: Int) {
let convertedString = NSMutableString(string: string)
CFStringTransform(convertedString, nil, kCFStringTransformStripCombiningMarks, Boolean(0))
var vowels = 0, consonants = 0
let regex = NSRegularExpression(pattern: "\\b\\w", options: nil, error: nil)
regex?.enumerateMatchesInString(convertedString as String, options: nil, range: NSMakeRange(0, convertedString.length)) { matches, flags, stop in
switch convertedString.substringWithRange(matches.range).lowercaseString {
case "a","e","i","o","u":
++vowels
case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
++consonants
default: break
}
}
return (vowels, consonants)
}