C++获取字符串最后一个单词长度的多种方法
问题描述给定一个由多个单词组成的句子每个单词由大小写字母混合构成单词间使用单个空格分隔。要求输出最后一个单词的长度。约束条件每个单词非空总字符长度不超过 103103单词间使用单个空格分隔示例1234输入HelloNowcoder输出13输入A B C D输出1解法一从后向前遍历法推荐123456789101112131415161718#include iostream#include stringusingnamespacestd;intmain() {string str;getline(cin, str);intlen 0;inti str.size() - 1;// 跳过末尾可能的空格虽然题目说没有但增加鲁棒性while(i 0 str[i] ) i--;// 计算最后一个单词的长度while(i 0 str[i] ! ) {len;i--;}cout len endl;return0;}算法分析时间复杂度O(n)最坏情况下需要遍历整个字符串空间复杂度O(1)只使用了常数个额外变量优点高效只需要一次遍历节省空间不需要额外存储鲁棒性好能处理末尾有空格的情况解法二使用rfind方法1234567891011121314151617#include iostream#include stringusingnamespacestd;intmain() {string str;getline(cin, str);// 从后向前查找最后一个空格的位置size_tpos str.rfind( );if(pos string::npos) {// 没有空格整个字符串就是一个单词cout str.size() endl;}else{// 计算最后一个单词的长度cout str.size() - pos - 1 endl;}return0;}关键点说明rfind( ): 从字符串末尾开始查找空格string::npos: 表示未找到值为-1但类型为size_t所以是最大无符号数注意处理只有一个单词的情况解法三使用stringstream分割12345678910111213141516#include iostream#include string#include sstreamusingnamespacestd;intmain() {string str;getline(cin, str);stringstream ss(str);string word, last_word;// 读取所有单词最后一个存储在last_word中while(ss word) {last_word word;}cout last_word.size() endl;return0;}算法特点优点代码简洁易读自动处理多余空格容易扩展如需要处理所有单词缺点需要额外的字符串拷贝使用stringstream有额外开销需要存储最后一个单词的完整副本解法四双指针法12345678910111213141516#include iostream#include stringusingnamespacestd;intmain() {string str;getline(cin, str);intright str.size() - 1;// 右指针跳过末尾空格while(right 0 str[right] ) right--;intleft right;// 左指针找到单词开头while(left 0 str[left] ! ) left--;// 计算长度cout right - left endl;return0;}算法性能对比方法时间复杂度空间复杂度优点缺点从后向前遍历O(n)O(1)效率高内存少需要手动处理边界rfind方法O(n)O(1)代码简洁需要处理nposstringstreamO(n)O(n)自动处理空格额外开销大双指针法O(n)O(1)思路清晰需要两个指针边界条件处理1. 空字符串12345// 在从后向前遍历法中if(str.empty()) {cout 0 endl;return0;}2. 全是空格12345// 在从后向前遍历法中第一个while循环后i可能为-1if(i 0) {cout 0 endl;return0;}3. 末尾有多个空格12// 所有方法都应该处理这种情况// 解法一和四已经通过while循环处理扩展问题1. 获取倒数第二个单词的长度1234567891011121314151617181920#include iostream#include stringusingnamespacestd;intmain() {string str;getline(cin, str);intcount 0;inti str.size() - 1;// 跳过末尾空格while(i 0 str[i] ) i--;// 找倒数第一个单词while(i 0 str[i] ! ) i--;// 跳过单词间的空格while(i 0 str[i] ) i--;// 找倒数第二个单词的末尾intend i;while(i 0 str[i] ! ) i--;cout end - i endl;return0;}2. 统计句子中单词的数量12345678910111213141516#include iostream#include string#include sstreamusingnamespacestd;intmain() {string str;getline(cin, str);stringstream ss(str);string word;intcount 0;while(ss word) {count;}cout count endl;return0;}3. 获取最长的单词12345678910111213141516171819#include iostream#include string#include sstreamusingnamespacestd;intmain() {string str;getline(cin, str);stringstream ss(str);string word, longest_word;intmax_len 0;while(ss word) {if(word.size() max_len) {max_len word.size();longest_word word;}}cout 最长单词: longest_word , 长度: max_len endl;return0;}实际应用场景1. 命令行工具12// 实现类似Linux的wc命令统计单词数// 可以扩展为获取最后一行或最后一个单词2. 文本编辑器12// 在代码编辑器中获取光标所在单词的长度// 用于自动补全或语法高亮3. 日志分析1// 分析日志文件的最后一个状态码或错误信息4. 自然语言处理12// 在NLP预处理中获取句子的最后一个词// 用于语言模型训练或情感分析测试用例1234567891011121314151617181920voidtest() {// 测试用例集合vectorpairstring,int test_cases {{HelloNowcoder, 13},{A B C D, 1},{Hello World, 5},{a, 1},{ , 0},// 全是空格{hello , 5},// 末尾有空格{ hello, 5},// 开头有空格{multiple spaces between, 7},// 多个空格{, 0},// 空字符串{12345 67890, 5},{The quick brown fox jumps over the lazy dog, 3}};for(auto test_case : test_cases) {// 测试各个算法cout 输入: \ test_case.first \, 期望: test_case.second endl;}}优化技巧1. 使用引用避免拷贝1234// 在处理大字符串时使用const引用voidprocessString(conststring str) {// 处理逻辑}2. 预分配内存12// 如果知道最大长度可以预分配str.reserve(1000);// 根据题目约束3. 使用C风格字符串1234567891011// 在性能关键场景可以使用C风格字符串intgetLastWordLength(constchar* str) {intlen 0;inti strlen(str) - 1;while(i 0 str[i] ) i--;while(i 0 str[i] ! ) {len;i--;}returnlen;}常见错误1. 忘记处理npos123// 错误示例size_tpos str.rfind( );intlength str.size() - pos - 1;// 当pos为npos时计算错误2. 未考虑末尾空格12345// 错误示例intpos str.rfind( );if(pos ! -1) {cout str.size() - pos - 1 endl;// 如果末尾有空格结果错误}3. 越界访问123// 错误示例inti str.size() - 1;while(str[i] ) i--;// 如果字符串为空i为-1访问越界总结获取字符串最后一个单词的长度是一个基础的字符串处理问题但它涉及了许多重要的编程概念字符串遍历技巧从后向前遍历是解决此类问题的关键边界条件处理空字符串、空格、单个单词等情况都需要考虑算法选择根据具体需求选择最合适的算法代码鲁棒性处理各种异常输入情况推荐方法从后向前遍历法效率高空间复杂度低代码清晰易于理解鲁棒性好能处理各种边界情况掌握这个问题的解法不仅能帮助解决类似问题还能提高字符串处理的基本功。在实际开发中根据具体场景选择最合适的方法才是最重要的。

相关新闻

DDS技术解析:从原理到实战,掌握现代信号源核心

DDS技术解析:从原理到实战,掌握现代信号源核心

1. 从模拟到数字:DDS技术为何成为现代信号源的核心如果你在射频、通信或者音频领域工作,那么“信号发生器”绝对是你工作台上的常客。从早期的模拟振荡器,到后来基于锁相环的频率合成器,再到如今几乎无处不在的直接数字频率合成技…

2026/8/7 11:26:15 阅读更多 →
“模板同质化”困局已破!用LLM+RAG重构AI模板知识库的5层架构设计(附GitHub开源代码库)

“模板同质化”困局已破!用LLM+RAG重构AI模板知识库的5层架构设计(附GitHub开源代码库)

更多请点击: https://codechina.net 第一章:AI做模板售卖 AI驱动的模板生成与售卖已成SaaS服务与开发者生态中的新兴商业模式。借助大语言模型(LLM)和多模态生成能力,开发者可快速将业务逻辑、UI结构、数据流等抽象为…

2026/8/5 23:31:53 阅读更多 →
基于AT89C52与Proteus的电子琴音乐盒仿真设计实战

基于AT89C52与Proteus的电子琴音乐盒仿真设计实战

这次我们来看一个基于 AT89C52 单片机的电子琴与音乐盒仿真设计项目。对于单片机初学者、电子爱好者或正在完成课程设计的学生来说,这是一个非常经典的实践案例。它不涉及复杂的 AI 模型或高额硬件成本,核心在于理解单片机如何通过编程控制外围设备&…

2026/8/5 23:31:53 阅读更多 →

最新新闻

YingLong_110m模型配置详解:从n_embd到rope_base的关键参数调优指南

YingLong_110m模型配置详解:从n_embd到rope_base的关键参数调优指南

YingLong_110m模型配置详解:从n_embd到rope_base的关键参数调优指南 【免费下载链接】YingLong_110m 项目地址: https://ai.gitcode.com/hf_mirrors/qcw2333/YingLong_110m YingLong_110m是由Alibaba开发的轻量级AI模型,通过精细的参数配置可实现…

2026/8/8 20:40:32 阅读更多 →
10个实用技巧:用Azure DevOps Python API提升开发效率

10个实用技巧:用Azure DevOps Python API提升开发效率

10个实用技巧:用Azure DevOps Python API提升开发效率 【免费下载链接】azure-devops-python-api Azure DevOps Python API 项目地址: https://gitcode.com/gh_mirrors/az/azure-devops-python-api Azure DevOps Python API是一款强大的工具,能帮…

2026/8/8 20:40:32 阅读更多 →
2.4倍速度提升!Kanana-2-3B-Instruct-6bit在M1 Pro上的实测性能

2.4倍速度提升!Kanana-2-3B-Instruct-6bit在M1 Pro上的实测性能

2.4倍速度提升!Kanana-2-3B-Instruct-6bit在M1 Pro上的实测性能 【免费下载链接】kanana-2-3b-instruct-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/kanana-2-3b-instruct-6bit Kanana-2-3B-Instruct-6bit是针对Apple Silicon优化的M…

2026/8/8 20:40:32 阅读更多 →
TencentDB Agent Memory Roadmap解读:未来将支持哪些令人期待的新功能?

TencentDB Agent Memory Roadmap解读:未来将支持哪些令人期待的新功能?

TencentDB Agent Memory Roadmap解读:未来将支持哪些令人期待的新功能? 【免费下载链接】TencentDB-Agent-Memory TencentDB Agent Memory is a team-level memory hub for AI Agents — turning conversations, docs, and code into four reusable memo…

2026/8/8 20:40:32 阅读更多 →
从零开始使用gh_mirrors/ca/cad.js:5分钟快速搭建Web CAD查看器

从零开始使用gh_mirrors/ca/cad.js:5分钟快速搭建Web CAD查看器

从零开始使用gh_mirrors/ca/cad.js:5分钟快速搭建Web CAD查看器 【免费下载链接】cad.js Web-based CAD file viewer 项目地址: https://gitcode.com/gh_mirrors/ca/cad.js gh_mirrors/ca/cad.js是一个基于Web的CAD文件查看器,能够帮助用户在浏览…

2026/8/8 20:40:32 阅读更多 →
OptiQ量化技术全解析:LFM2.5-350M模型敏感度驱动的4/8bit混合策略

OptiQ量化技术全解析:LFM2.5-350M模型敏感度驱动的4/8bit混合策略

OptiQ量化技术全解析:LFM2.5-350M模型敏感度驱动的4/8bit混合策略 【免费下载链接】LFM2.5-350M-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-350M-OptiQ-4bit LFM2.5-350M-OptiQ-4bit模型是基于LiquidAI/LFM2.5-350M基础…

2026/8/8 20:39:32 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/8 17:02:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →