美文网首页
计算一个字符串中元音和辅音出现的次数

计算一个字符串中元音和辅音出现的次数

作者: 落叶刺客 | 来源:发表于2017-08-10 16:26 被阅读26次
问题:给定一个字符串儿,如何计算它里面所包含的元音和辅音出现的次数?

  我们刚在上一篇笔记中学习了如何判断一个字符串儿中是否包含全部26个英文字母,接下来增加一点儿难度。还是以CGTN的头版新闻,金三胖威胁用导弹轰炸美国关岛为例,你能计算出下面这段字符串儿中包含多少个元音字母和多少个辅音字母?

The DPRK is working on plans for a missile strike near the US Pacific territory of Guam, calling President Donald Trump's warning of fire and fury a load of nonsense and that only absolute force can work on him.

  在解决这个问题之前,我们先来明确一下什么叫做元音字母,以及什么叫做辅音字母。我们都知道,在26个英文字母中,元音字母只有5个,分别是:A、E、I、O、U,然后剩下的就全部是辅音字母了。

  了解完什么是元音和辅音之后,我们再来解决这个问题。首先应该想到的处理方式是for ... in循环。遍历字符串儿中所有的字符,找到一个元音字符,就将元音字符的计数加1;找到一个辅音字符,就将辅音字符的计数加1。用代码表示为:

func challenge(input: String) -> (vowels: Int, consonants: Int) {
    
    // 创建元音字符集
    let vowels = CharacterSet(charactersIn: "aeiou")
    
    // 创建辅音字符集
    let consonants = CharacterSet(charactersIn: "bcdfghjklmnpqrstvwxyz")
    
    // 分别用于计算元音和辅音的个数
    var vowelCount = 0
    var consonantCount = 0
    
    // 将输入的字符全部转换成小写字母并且遍历
    for letter in input.lowercased().characters {
        
        // 将字母从Character类型强转为String类型
        let stringLetter = String(letter)
        
        // 分别判断是否存在元音字母和辅音字母
        if stringLetter.rangeOfCharacter(from: vowels) != nil {
            
            // 如果遍历的字母中存在元音字符,则计算元音字符的数量加1
            vowelCount += 1
            
        } else if stringLetter.rangeOfCharacter(from: consonants) != nil {
            
            // 如果遍历的字母中存在辅音字符,则计算辅音字符的数量加1
            consonantCount += 1
        }
    }
    
    // 返回元音字符和辅音字符的数量
    return (vowelCount, consonantCount)
}

let str = "The DPRK is working on plans for a missile strike near the US Pacific territory of Guam, calling President Donald Trump's warning of fire and fury a load of nonsense and that only absolute force can work on him."
challenge(input: str)  // vowels 61, consonants 109

  上面的代码主要用到了CharacterSet(charactersIn: )rangeOfCharacter(from: )这两个方法,其中CharacterSet是一个结构体,我们在《如何删除字符串中多余的空格》里已经做过简单的介绍,这里再做一个简单的说明:

CharacterSet.png

  CharacterSet主要是用来表示一组Unicode字符,它里面有好几个构造函数,我们今天用的主要是init(charactersIn string: ),它可以用给定的字符串儿来进行初始化。我们先用这个构造函数分别初始化了一个元音字符串集对象vowels,和一个辅音字符串儿集对象consonants,再用rangeOfCharacter(from: )从给定的字符集对象vowels和consonants中返回相应的元音字符或者辅音字符,如果返回成功(即结果不为nil),则相应的计数加1,最终计算出整个字符串儿中元音和辅音出现的总次数。

  再来一个思路跟上面一毛一样,但是判断方法不同的解决方案。我们的总体思路无非就是要检查某个遍历出来的字符是不是属于元音字符集vowels,或者辅音字符集consonants,所以在判断的时候除了可以使用rangeOfCharacter(from: )之外,还可以使用contains()。具体的代码如下:

func challenge(input: String) -> (vowels: Int, consonants: Int) {
        
        let vowels = "aeiou"
        let consonants = "bcdfghjklmnpqrstvwxyz"
        var vowelCount = 0
        var consonantCount = 0
        for letter in input.lowercased().characters {
            let stringLetter = String(letter)
            if vowels.contains(stringLetter) {
                
                // 如果vowels中包含字符stringLetter,则计数加1
                vowelCount += 1
            } else if consonants.contains(stringLetter) {
                
                // 如果consonants中包含字符stringLetter,则计数加1
                consonantCount += 1
            }
    }
        return (vowelCount, consonantCount)
}

相关文章

  • 计算一个字符串中元音和辅音出现的次数

    问题:给定一个字符串儿,如何计算它里面所包含的元音和辅音出现的次数?   我们刚在上一篇笔记中学习了如何判断一个字...

  • 英语的乐趣

    最近报了一个英语学习的课程,发现了很多新的内容。 连读 辅音和元音 元音和元音 辅音和辅音 失爆 b p d t ...

  • 英语基础知识:不定冠词和缩略形式

    一,a 和an 的用法和区别 口诀:辅音开头要用a ,元音开头要用an,单数名词才用上。 (辅音:辅音音素,元音:...

  • 英语连读规则

    发音规则一辅音+元音 一句话中相邻的两个单词,前一个单词以辅音结尾,后一个单词以元音开始,拼读成“辅音+元音”。 ...

  • 元音,辅音,音节和重音

    1. 元音/辅音 所有元音的发音都需要张嘴振动声带。 辅音,依元音而存在。辅音与元音配合产生音节。 辅音包含浊辅音...

  • 泰格趣拼第四讲元音的音形对应

    课前复习:辅音口决 辅音分类. 元音和元音拼写 字母表中有5个元音字母,21个辅音字母 元音常见的发音是短音,它是...

  • 开音节vs闭音节

    辅音 + 元音 = 开音节 如: 开音节中的元音,一般发音比较长。 元音 + 辅音 = 闭音节 如: 闭音节中的元...

  • 英语语音与拼写:双元音概述

    在探讨此处的双元音之前,中古英语时期出现的双元音,主要是通过元音和使开辅音元音化(w,g)组合的方式实现,...

  • 文章完美语音第二课 前元音+爆破辅音

    一、音标的整体介绍: [if !vml] [endif] 大类 1、元音;2、辅音 【元音(Vowel)和辅音( ...

  • 第二课作业

    一、音标的整体介绍: [if !vml] [endif] 大类 1、元音;2、辅音 【元音(Vowel)和辅音( ...

网友评论

      本文标题:计算一个字符串中元音和辅音出现的次数

      本文链接:https://www.haomeiwen.com/subject/cmehrxtx.html