Swift函数实现:元音小写、辅音大写、数字转英文单词
Swift字符串转换函数实现问题
需求说明
- 实现一个接收字符串并返回字符串的函数,需遵循以下规则:
- 所有元音字母转为小写
- 辅音字母转为大写
- 数字转换为对应的英文单词
预期效果示例
- 原字符串:
"hello, I have been studying swift for 1 month" - 转换结果:
"hEllO, I hAvE bEEn stUdUIng swIft fOr OnE mOnth"
尝试的代码
用户尝试用数组和字典实现,但未成功,不清楚如何在函数中处理字符转换:
// 元音字母数组(存在重复的e) var lowercase: [Character] = ["a", "e", "i", "o", "e", "y"] var uppercase: [Character] = ["A", "E", "I", "O", "E", "Y"] // 数字映射字典 let nums = [1:"one", 2:"two", 3:"three", 4:"fourth", 5:"five"]
实现方案
无需修改数组元素,直接遍历输入字符串的每个字符,逐个处理后拼接结果即可,优化后的实现代码如下:
func transformString(_ input: String) -> String { // 用Set存储元音字母,判断效率更高,包含大小写覆盖所有情况 let vowels: Set<Character> = ["a", "e", "i", "o", "u", "y", "A", "E", "I", "O", "U", "Y"] // 数字字符到英文单词的映射,直接匹配字符串中的数字字符 let numMap: [Character: String] = ["1":"one", "2":"two", "3":"three", "4":"four", "5":"five"] var result = "" for char in input { // 优先处理数字:匹配到数字则替换为对应单词并首字母大写 if let word = numMap[char] { result.append(word.capitalized) continue } // 处理元音和辅音:元音转小写,辅音转大写 if vowels.contains(char) { result.append(char.lowercased()) } else { // 非字母字符(逗号、空格等)调用uppercased()会保持原样 result.append(char.uppercased()) } } return result } // 测试示例 let original = "hello, I have been studying swift for 1 month" let transformed = transformString(original) print(transformed) // 输出: hEllO, I hAvE bEEn stUdUIng swIft fOr OnE mOnth
代码说明
- 用
Set存储元音字母,相比数组判断效率更高,同时包含大小写避免重复判断逻辑 - 数字映射字典的键使用
Character,可以直接匹配输入字符串中的数字字符 - 遍历字符时优先处理数字,再区分元音和辅音,非字母/数字的字符会自动保持原有形态
- 无需修改原数组,直接通过遍历构建结果字符串即可完成需求
内容的提问来源于stack exchange,提问作者daria
相关产品推荐
相关产品推荐

