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

我来为你提供 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 保持不变

相关推荐
汉克老师3 分钟前
GESP2026年9月认证C++七级( 第三部分编程题(1、必经之路))精讲
c++·gesp·小学生·学c++编程
“AI国潮设计-小江”7 分钟前
《Python+SDXL实战:用ControlNet精准控制“英歌舞戚风蛋糕”质感,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
jayhgq14 分钟前
新一代Python包与项目管理工具——UV
开发语言·python·uv
ebiobiz18 分钟前
Zig 嵌入式底层库选择与 build.zig 组织指南
c语言·c++·嵌入式硬件·mcu
for_ever_love__19 分钟前
文件与异常——open、json、with 与 try-except 的工程写法
python·异常处理·文件操作·大模型开发
XLYcmy21 分钟前
PDF 论文处理器 — 技术报告文档
数据库·python·网络安全·pdf·embedding·dify·rag
weixin_4404016922 分钟前
质朴的可视化绘图+pyecharts
开发语言·python·信息可视化·pyecharts
计算机毕业编程指导师26 分钟前
【Python毕设选题推荐】基于Spark的国内主要农作物产量趋势分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·python·数据分析·spark·毕业设计·课程设计·农作物产量
计算机毕业编程指导师33 分钟前
【Python毕设选题推荐】基于Spark的宫颈癌变光谱特征数据分析可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·宫颈癌变
ss27333 分钟前
AI全栈实战 | 3.3-01 Python OOP:__init__ 真的是构造函数吗,元类怎么让 Django Model 变魔法
开发语言·python·django