news 2026/7/9 15:29:41

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
字符串处理小写字母转换大写字母

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

Python 实现

defprocess_string(s:str)->tuple[str,int]:""" 将字符串中的小写字母转换为大写,并统计小写字母个数 Args: s: 输入字符串 Returns: tuple[转换后的字符串, 小写字母个数] """lowercase_count=0result_chars=[]forchins:if'a'<=ch<='z':result_chars.append(chr(ord(ch)-32))# 小写转大写lowercase_count+=1else:result_chars.append(ch)# 其他字符保持不变return''.join(result_chars),lowercase_count# 更简洁的 Pythonic 写法defprocess_string_pythonic(s:str)->tuple[str,int]:lowercase_count=sum(1forchinsif'a'<=ch<='z')result=''.join(ch.upper()if'a'<=ch<='z'elsechforchins)returnresult,lowercase_count# 测试if__name__=="__main__":text="Hello World! 123"result,count=process_string(text)print(f"输入:{text}")print(f"输出:{result}")print(f"小写字母数:{count}")

C++ 实现

#include<iostream>#include<string>#include<cctype>// 用于 islower 和 toupper#include<utility>// 用于 pairstd::pair<std::string,int>processString(conststd::string&input){std::string result;intlowercaseCount=0;// 预分配空间,提高效率result.reserve(input.length());for(charch:input){if(islower(ch)){result.push_back(toupper(ch));// 小写转大写++lowercaseCount;}else{result.push_back(ch);// 其他字符保持不变}}return{result,lowercaseCount};}// 使用传统指针的 C 风格实现voidprocessStringCstyle(constchar*input,char*output,int*lowercaseCount){*lowercaseCount=0;for(inti=0;input[i]!='\0';++i){charch=input[i];if(ch>='a'&&ch<='z'){output[i]=ch-32;// 小写转大写++(*lowercaseCount);}else{output[i]=ch;}}output[strlen(input)]='\0';// 字符串结束符}// 测试intmain(){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;return0;}

Rust 实现

fnprocess_string(s:&str)->(String,usize){letmutresult=String::with_capacity(s.len());letmutlowercase_count=0;forchins.chars(){ifch.is_ascii_lowercase(){// 小写字母转大写result.push(ch.to_ascii_uppercase());lowercase_count+=1;}else{// 其他字符保持不变result.push(ch);}}(result,lowercase_count)}// 更函数式的 Rust 实现fnprocess_string_functional(s:&str)->(String,usize){letlowercase_count=s.chars().filter(|c|c.is_ascii_lowercase()).count();letresult=s.chars().map(|c|{ifc.is_ascii_lowercase(){c.to_ascii_uppercase()}else{c}}).collect();(result,lowercase_count)}// 测试fnmain(){lettext="Hello World! 123";let(result,count)=process_string(text);println!("输入: {}",text);println!("输出: {}",result);println!("小写字母数: {}",count);}// 单元测试#[cfg(test)]modtests{usesuper::*;#[test]fntest_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 保持不变

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 3:52:04

无尘模组000

一、产品现状与核心优势 产品矩阵&#xff1a;TOYO 无尘模组涵盖三大核心系列&#xff0c;均已实现标准化量产&#xff1a;GCH 系列&#xff1a;轨道内嵌式丝杆模组&#xff0c;外接真空源可实现 CLASS 1 洁净度&#xff0c;半导体设备首选TOYO东佑达 ECB 系列&#xff1a;无尘…

作者头像 李华
网站建设 2026/7/9 18:22:33

好写作AI:一键终结你的研究方法“选择困难症”

深夜&#xff0c;电脑屏幕的光映在研究生小陈疲惫的脸上——论文开题在即&#xff0c;导师的问题在脑海中回响&#xff1a;“你的研究问题&#xff0c;到底适合用量化方法还是质性方法&#xff1f;”他感觉不是在思考方法&#xff0c;而是在进行一场没有参考答案的“学术剧本杀…

作者头像 李华
网站建设 2026/7/9 17:22:42

从入门到精通:Dapr Agentic Cloud Ascent (DACA) 设计模式完整指南

从入门到精通&#xff1a;Dapr Agentic Cloud Ascent (DACA) 设计模式完整指南 【免费下载链接】learn-agentic-ai Learn Agentic AI using Dapr Agentic Cloud Ascent (DACA) Design Pattern: OpenAI Agents SDK, Memory, MCP, Knowledge Graphs, Docker, Docker Compose, and…

作者头像 李华
网站建设 2026/7/9 16:22:51

Flipper Zero终极指南:一键解锁Amiibo模拟完整攻略

Flipper Zero终极指南&#xff1a;一键解锁Amiibo模拟完整攻略 【免费下载链接】Flipper Playground (and dump) of stuff I make or modify for the Flipper Zero 项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper 还在为心仪的Amiibo玩具价格望而却步吗&…

作者头像 李华
网站建设 2026/7/10 7:11:34

Katana爬虫框架:解锁学术数据采集的实用工具

面对海量学术文献&#xff0c;你是否还在为手动下载论文、处理动态页面而烦恼&#xff1f;Katana爬虫框架正是为解决这些痛点而生&#xff0c;它不仅能高效爬取学术论文&#xff0c;还能自动化完成文献收集&#xff0c;是现代研究者的必备工具。 【免费下载链接】katana 下一代…

作者头像 李华