字符串处理小写字母转换大写字母

我来为你提供 Python、C++、Rust 的实现:

Python 实现

python 复制代码
def process_string(s: str) -> tuple[str, int]:
    """
    将字符串中的小写字母转换为大写,并统计小写字母个数
    
    Args:
        s: 输入字符串
        
    Returns:
        tuple[转换后的字符串, 小写字母个数]
    """
    lowercase_count = 0
    result_chars = []
    
    for ch in s:
        if 'a' <= ch <= 'z':
            result_chars.append(chr(ord(ch) - 32))  # 小写转大写
            lowercase_count += 1
        else:
            result_chars.append(ch)  # 其他字符保持不变
            
    return ''.join(result_chars), lowercase_count


# 更简洁的 Pythonic 写法
def process_string_pythonic(s: str) -> tuple[str, int]:
    lowercase_count = sum(1 for ch in s if 'a' <= ch <= 'z')
    result = ''.join(ch.upper() if 'a' <= ch <= 'z' else ch for ch in s)
    return result, lowercase_count


# 测试
if __name__ == "__main__":
    text = "Hello World! 123"
    result, count = process_string(text)
    print(f"输入: {text}")
    print(f"输出: {result}")
    print(f"小写字母数: {count}")

C++ 实现

cpp 复制代码
#include <iostream>
#include <string>
#include <cctype>  // 用于 islower 和 toupper
#include <utility> // 用于 pair

std::pair<std::string, int> processString(const std::string& input) {
    std::string result;
    int lowercaseCount = 0;
    
    // 预分配空间,提高效率
    result.reserve(input.length());
    
    for (char ch : input) {
        if (islower(ch)) {
            result.push_back(toupper(ch));  // 小写转大写
            ++lowercaseCount;
        } else {
            result.push_back(ch);  // 其他字符保持不变
        }
    }
    
    return {result, lowercaseCount};
}

// 使用传统指针的 C 风格实现
void processStringCstyle(const char* input, char* output, int* lowercaseCount) {
    *lowercaseCount = 0;
    
    for (int i = 0; input[i] != '\0'; ++i) {
        char ch = input[i];
        if (ch >= 'a' && ch <= 'z') {
            output[i] = ch - 32;  // 小写转大写
            ++(*lowercaseCount);
        } else {
            output[i] = ch;
        }
    }
    output[strlen(input)] = '\0';  // 字符串结束符
}

// 测试
int main() {
    std::string text = "Hello World! 123";
    
    auto [result, count] = processString(text);
    
    std::cout << "输入: " << text << std::endl;
    std::cout << "输出: " << result << std::endl;
    std::cout << "小写字母数: " << count << std::endl;
    
    return 0;
}

Rust 实现

rust 复制代码
fn process_string(s: &str) -> (String, usize) {
    let mut result = String::with_capacity(s.len());
    let mut lowercase_count = 0;
    
    for ch in s.chars() {
        if ch.is_ascii_lowercase() {
            // 小写字母转大写
            result.push(ch.to_ascii_uppercase());
            lowercase_count += 1;
        } else {
            // 其他字符保持不变
            result.push(ch);
        }
    }
    
    (result, lowercase_count)
}

// 更函数式的 Rust 实现
fn process_string_functional(s: &str) -> (String, usize) {
    let lowercase_count = s.chars().filter(|c| c.is_ascii_lowercase()).count();
    
    let result = s.chars()
        .map(|c| {
            if c.is_ascii_lowercase() {
                c.to_ascii_uppercase()
            } else {
                c
            }
        })
        .collect();
    
    (result, lowercase_count)
}

// 测试
fn main() {
    let text = "Hello World! 123";
    
    let (result, count) = process_string(text);
    
    println!("输入: {}", text);
    println!("输出: {}", result);
    println!("小写字母数: {}", count);
}

// 单元测试
#[cfg(test)]
mod tests {
    use super::*;
    
    #[test]
    fn test_process_string() {
        assert_eq!(process_string("Hello"), ("HELLO".to_string(), 4));
        assert_eq!(process_string("123"), ("123".to_string(), 0));
        assert_eq!(process_string("aBcDeF"), ("ABCDEF".to_string(), 3));
        assert_eq!(process_string(""), ("".to_string(), 0));
    }
}

各语言特点对比

特性 Python C++ Rust

字符串类型 不可变 Unicode std::string(可变) String(可变),&str(不可变切片)

内存管理 自动垃圾回收 手动/RAII 所有权系统

函数返回 元组 (str, int) pair<string, int> 元组 (String, usize)

字符处理 内置方法 .upper() 标准库函数 toupper() 方法 .to_ascii_uppercase()

空安全 运行时检查 无(可能空指针) 编译时保证(Option类型)

性能特点 简洁但较慢 高效,接近硬件 零成本抽象,内存安全

运行示例

复制代码
输入: "Hello World! 123"
输出: "HELLO WORLD! 123"
小写字母数: 8

解释:

· "Hello World!" 中有 8 个小写字母(e,l,l,o,o,r,l,d)

· 数字和标点符号保持不变

· 原本的大写字母 H、W 保持不变

相关推荐
兵慌码乱10 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵11 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio15 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户03321266636716 小时前
使用 Python 从零创建 Word 文档
python
众少成多积小致巨17 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
大卫小东(Sheldon)20 小时前
Rust 推荐使用宏而非普通函数的场景
rust
doiito20 小时前
【Agent Harness】为什么我把 JSON‑LD “编译成 DAG” 后,整个 Agent 平台立刻聪明了
ai·rust·架构设计·系统设计·ai agent
Csvn21 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
jump_jump1 天前
为了重玩金庸群侠传,我研究了一下 Ruffle 怎么复活 Flash
游戏·rust·github