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

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

相关推荐
Hgfdsaqwr1 天前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
开发者小天1 天前
python中For Loop的用法
java·服务器·python
老百姓懂点AI1 天前
[RAG实战] 向量数据库选型与优化:智能体来了(西南总部)AI agent指挥官的长短期记忆架构设计
python
u0109272711 天前
C++中的策略模式变体
开发语言·c++·算法
Aevget1 天前
MFC扩展库BCGControlBar Pro v37.2新版亮点:控件功能进一步升级
c++·mfc·界面控件
Tansmjs1 天前
C++与GPU计算(CUDA)
开发语言·c++·算法
喵手1 天前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
Suchadar1 天前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大1 天前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手1 天前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析