跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ string 类实战:单词长度、回文验证与字符串反转

C++ string 处理常见面试题解析。涵盖输入流 getline 使用、rfind 定位技巧、回文串双指针验证、字符频率统计及字符串反转算法。通过手写逻辑而非库函数,深入理解底层实现原理,适合备战笔试面试。

remedios发布于 2026/3/23更新于 2026/7/2535 浏览
C++ string 类实战:单词长度、回文验证与字符串反转

字符串最后一个单词的长度

在 C++ 中处理字符串输入时,cin 遇到空格会停止读取,这往往不符合题目要求。比如输入 "Hello World",cin 只能读到 "Hello"。此时应改用全局函数 getline(cin, str),它能完整读取一行内容。

要获取最后一个单词的长度,常规思路是遍历记录空格位置,但利用 string 类的 rfind 成员函数会更高效。rfind 从后向前查找指定字符,返回其起始下标。若找到空格,长度即为总长减去该位置加一;若未找到(整串无空格),则直接返回总长。注意判断返回值是否为 string::npos,这是表示'未找到'的常量。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    getline(cin, str);
    size_t pos = str.rfind(' ');
    if (pos != string::npos) {
        cout << str.size() - (pos + 1) << endl;
    } else {
        cout << str.size() << endl;
    }
    return 0;
}

验证回文串

判断回文串的核心在于规范化处理:统一大小写并剔除非字母数字字符。虽然标准库有相关函数,但为了理解逻辑,我们可以手动实现过滤过程。

遍历原字符串,将大写字母转为小写(ASCII 码 +32),保留小写字母和数字,构建新串。随后使用双指针,一个从头开始,一个从尾开始,向中间靠拢比较字符。若中途发现不一致,则不是回文串。

class Solution {
public:
    bool isPalindrome(string s) {
        string blank_string;
        for (auto ch : s) {
            if (ch >= 'A' && ch <= 'Z') {
                blank_string += ch + ;
            }   (ch >=  && ch <= ) {
                blank_string += ch;
            }   (ch >=  && ch <= ) {
                blank_string += ch;
            }
        }
         left = ;
         right = blank_string.() - ;
         (left < right) {
             (blank_string[left] != blank_string[right]) {
                 ;
            }
            left++;
            right--;
        }
         ;
    }
};
32
else
if
'a'
'z'
else
if
'0'
'9'
int
0
int
size
1
while
if
return
false
return
true

字符串中的第一个唯一字符

题目限定只包含小写字母,这提示我们可以用定长数组来统计频次。定义大小为 26 的数组,索引对应字符偏移量(ch - 'a')。

第一遍遍历字符串统计每个字符出现次数,第二遍再次遍历原字符串,检查对应计数是否为 1。一旦找到即返回当前索引,若遍历结束仍未找到则返回 -1。这种方法时间复杂度为 O(n),空间占用极小。

class Solution {
public:
    int firstUniqChar(string s) {
        int count[26] = {0};
        for (char ch : s) {
            count[ch - 'a']++;
        }
        for (int i = 0; i < s.size(); i++) {
            if (count[s[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }
};

反转字符串

反转操作相对直观,核心是利用双指针交换首尾元素。需要注意的是,题目参数通常是 vector<char>&,但在逻辑上可视为可变字符串处理。

设置左右指针分别指向两端,交换内容后左移右移,直到相遇。std::swap 函数能简化交换逻辑。此外,需先判断容器是否为空,避免不必要的操作。

class Solution {
public:
    void reverseString(vector<char>& s) {
        if (s.empty()) return;
        int start = 0;
        int end = s.size() - 1;
        while (start < end) {
            swap(s[start], s[end]);
            start++;
            end--;
        }
    }
};

目录

  1. 字符串最后一个单词的长度
  2. 验证回文串
  3. 字符串中的第一个唯一字符
  4. 反转字符串
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 递归算法实战:汉诺塔与合并有序链表详解
  • MCP 协议详解:AI 智能体连接外部工具的新标准
  • 基于 Ant Design Vue 4.x 的然然管理系统前端架构实践
  • Spring Boot 参数配置详解:properties、yml 及外部化配置
  • Qt C++ 场景图架构核心类详解
  • AI+直播营销:引流短视频策划及AIGC应用方法
  • Flink 批计算单词统计示例
  • 前端 PWA 开发指南:构建离线可安装 Web 应用
  • AI 辅助开发:使用 DeepSeek 构建贪吃蛇游戏
  • 无线蜂窝网络:原理、架构与代际演进
  • 设计模式实战:过滤器模式(Criteria Pattern)详解
  • OpenClaw 2026.3.3 新增 AI 解析 PDF 功能实测
  • OpenClaw:AI 代理框架如何重塑产品思维与工作流程
  • C++ Boost 搜索引擎数据清洗与解析实现详解
  • Webnovel Writer:基于 Claude Code 的长篇网文 AI 创作系统
  • 低成本运行 Claude Code:通过 LiteLLM 接入 GitHub Copilot Chat API
  • 智能梯控系统设计方案:跨品牌群控与 AI 调度架构解析
  • GESP C++ 一级真题解析:手机电量显示
  • Angular入门启蒙03,Angular 环境搭建全解析:Node.js、npm 与 Angular CLI 安装配置
  • C++ multiset 核心原理与实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online