3.5 练习及解析

(1)分别创建字符串变量China和MyLove,将这两个变量拼接成为一句话并且对拼接后的新字符串变量进行遍历,并检查其中是否有L字符,有则进行打印操作。

解析:

        var str1 = "China"
        var str2 = String("MyLove")
        var str3 = str1+str2!
        for chara in str3.characters {
            if chara == "L" {
              print(chara)
            }
        }

(2)删除下面字符串中的所有“! ”和“? ”符号。

        swsvr! vrfe?123321! !你好!世界?

解析:

        var stringOri2 =  "swsvr! vrfe?123321! !你好?世界!"
        //创建一个空字符串用于进行接收
        var stringRes2 = String()
        for index in stringOri2.characters.indices {
            if stringOri2[index] ! = "? " && stringOri2[index] ! = "! " {
              stringRes2.append(stringOri2[index])
            }
        }

(3)将字符串abcdefg进行倒序排列,并打印。

解析:

        var stringOri3 = "abcdefg"
        var index3 = stringOri3.endIndex
        var stringRes3 = String()
        while index3>stringOri3.startIndex {
            index3 = stringOri3.index(before: index3)
            stringRes3.append(stringOri3[index3])
        }
        print(stringRes3)

(4)将“*”符号逐个插入下面字符串的字符中间,并打印。

        我爱你中国

解析:

        var stringOri4 = "我爱你中国"
        var stringRes4 = String()
        for index in stringOri4.characters.indices {
            stringRes4.append(stringOri4[index])
            if index<stringOri4.index(before: stringOri4.endIndex) {
              stringRes4.append(Character("*"))
            }
        }
        print(stringRes4)

(5)将下面字符串中所有的abc替换成Hello,并打印。

        abc中国abc美国abc英国~德国abc法国abc
        解析:
        var stringOri5 = "abc中国abc美国abc英国~德国abc法国abc"
        var range5 = stringOri5.range(of:"abc")
        while range5 ! = nil {
            stringOri5.replaceSubrange(range5! , with: "Hello")
            range5 = stringOri5.range(of:"abc")
        }
        print(stringOri5)

(6)进行正负号翻转,并打印。

将 -123转换为+123

将 +456转换为-456

解析:

        var stringOri6 = "-123"
        var stringOri_6 = "+456"
        if stringOri6.hasPrefix("-"){
            stringOri6.replaceSubrange(stringOri6.startIndex..<stringOri6.index
    (after: startIndex), with: "+")
        }
        if stringOri_6.hasPrefix("+"){
            stringOri_6.replaceSubrange(stringOri_6.startIndex..<stringOri_6.index
    (after: startIndex), with: "-")
        }
        print(stringOri6, stringOri_6)

(7)将下列数组中的0去掉,返回新的数组,并打印输出。

        [1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15]

解析:

        var arrayOri1 = [1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15]
        var arrayRes1 = Array<Int>()
        for index in arrayOri1.indices {
            if arrayOri1[index] == 0 {
              continue
            }
            arrayRes1.append(arrayOri1[index])
        }
        print(arrayRes1)

(8)定义一个包含10个元素的数组,对其进行赋值,使每个元素的值等于其下标,然后输出,最后将数组倒置后输出。

解析:

        var arrayOri2 = Array<Int>()
        for index in 0...9{
            arrayOri2.append(index)
        }
        print(arrayOri2)
        //进行倒置排序
        arrayOri2.sort(by: { (a, b) -> Bool in
            return a>b
        })
        print(arrayOri2)

(9)工程测量到两组数据,分别为2、4、3、5与3、4、7、1。对两组数据进行整合,使其合成一组数据,重复的数据只算一次,使用代码描述此过程。

解析:

        var setOri3:Set<Int> = [2,4,3,5]
        var setOri32:Set<Int> = [3,4,7,1]
        var setRes3 = setOri3.union(setOri32)

(10)期末考试中,王晓成绩98,邹明成绩86,李小伟成绩93,用字典结构来对3人的成绩进行存储,并进行从高到低的排序输出。

解析:

        var dicOri4 = ["王晓":98, "邹明":86, "李小伟":93]
        for item in dicOri4.sorted(by: { (student1, student2) -> Bool in
            return student1.value > student2.value
        }){
            print(item)
        }

本题在解析时使用到一个排序闭包,后面章节会有对闭包语法的详细讲解。