2017-03-08 65 views
1

假设有一个字符串“johngoestoschool”,它应该成为“JoHnGoEsToScHoOl”,并且如果在它之间存在特殊字符,则应该忽略它,例如给定字符串“jo $%@#hn^goe!st# OS & CH∞)l”的答案应该是 “乔$%@#Hn的^ g 则oE!ST#OS & CH OO)L”如何大写字符串的每个替代字符?

this答案,我们以迭代,我们可以做:

let s = "alpha" 
for i in s.characters.indices[s.startIndex..<s.endIndex] 
{ 
    print(s[i]) 
} 

为什么我们不能打印“我”她的价值她è? 当我们做i.customPlaygroundQuickLook类型int 0到int4。

所以我的想法是

if (i.customPlaygroundQuickLook == 3) { 
     s.characters.currentindex = capitalized 
} 

请帮助

回答

2

这应该解决您的功能,最困难的部分是刚刚检查的天气特点是字母或不使用inout和替换范围将提供更好性能:

func altCaptalized(string: String) -> String { 
    var stringAr = string.characters.map({ String($0) }) // Convert string to characters array and mapped it to become array of single letter strings 
    var numOfLetters = 0 

    // Convert string to array of unicode scalar character to compare in CharacterSet 
    for (i,uni) in string.unicodeScalars.enumerated() { 
     //Check if the scalar character is in letter character set 
     if CharacterSet.letters.contains(uni) { 
      if numOfLetters % 2 == 0 { 
       stringAr[i] = stringAr[i].uppercased() //Replace lowercased letter with uppercased 
      } 
      numOfLetters += 1 
     } 
    } 

    return stringAr.joined() //Combine all the single letter strings in the array into one string 
} 
+0

“它像一个魅力一样工作”,唯一的问题是它直接在我的头上,我要求你添加评论,说明你已经做了什么w ith stringAr,什么是unicodeScalars功能,并加入了它在做什么? – Rishi

+0

当然,我认为它很简单,它只是简单地将字符串转换为单个字母数组,因为它具有不同的类型,您也可以将它们打印到控制台以查看详细信息 – Tj3n

+0

为什么您将'fifthStr'分配回'fiveStr'?使用不同的名称 – Tj3n

相关问题