You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

代码说明

  1. 用Set存储元音字母,相比数组判断效率更高,同时包含大小写避免重复判断逻辑
  2. 数字映射字典的键使用Character,可以直接匹配输入字符串中的数字字符
  3. 遍历字符时优先处理数字,再区分元音和辅音,非字母/数字的字符会自动保持原有形态
  4. 无需修改原数组,直接通过遍历构建结果字符串即可完成需求

内容的提问来源于stack exchange,提问作者daria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:12:19