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

C++ 字符串类基础与算法实战

C++ 字符串操作涵盖四个典型算法场景。包括利用 getline 处理含空格输入及 rfind 定位单词长度;通过双指针配合字符过滤验证回文串;使用计数数组查找首个唯一字符索引;以及利用双指针交换元素反转字符串。重点展示了底层逻辑实现而非依赖库函数,适合巩固字符串操作基础。

菩提发布于 2026/3/30更新于 2026/10/24102 浏览
C++ 字符串类基础与算法实战

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

处理这类问题时需要注意,标准输入流 cin 遇到空格会终止读取,因此需要改用 getline 获取整行。

getline 并非成员函数,而是输入流的全局函数(定义在 <string> 头文件中),用于从输入流中读取一整行内容存入 string 对象。其用法包括基础读整行和指定终止符读取。

要计算最后一个单词的长度,常规思路是从头遍历统计空格,但这略显冗余。利用 string 类的 rfind 成员函数可以高效定位末尾空格:

  • 若找到空格,长度 = 总长度 - (空格位置 + 1)
  • 若未找到空格(整串为一个单词),长度 = 总长度

rfind 从字符串末尾向前查找指定字符或子串,返回起始下标;未找到时返回 string::npos。注意 string::npos 是静态常量,代表无效位置,判断时应使用 pos != string::npos,而非 -1。

#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;
}

验证回文串

核心在于将大写字母转换为小写,并过滤非字母数字字符,随后利用双指针法验证对称性。虽然 STL 提供了便捷工具,但为了深入理解原理,我们先手动实现核心逻辑。

class Solution {
public:
    bool isPalindrome(string s) {
        // 步骤 1:过滤并转换(纯 ASCII 判断,无库函数)
        string blank_string;
        for (auto ch : s) {
            if (ch >= 'A' && ch <= 'Z') {
                blank_string += ch + 32; // 大写转小写
            } else if (ch >= 'a' && ch <= 'z') {
                blank_string += ch;
            } else if (ch >= '0' && ch <= '9') {
                blank_string += ch;
            }
            // 非字母/数字自动跳过
        }
        
        // 步骤 2:双指针验证回文
        int left = 0;
        int right = blank_string.size() - 1;
        while (left < right) {
            if (blank_string[left] != blank_string[right]) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
};

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

题目限定仅包含小写字母,这提示我们可以使用定长数组作为哈希表统计频次。首先初始化大小为 26 的数组,遍历字符串统计每个字符出现次数,再遍历原串查找第一个计数为 1 的字符索引。

class Solution {
public:
    int firstUniqChar(string s) {
        // 步骤 1:统计频次
        int count[26] = {0};
        for (char ch : s) {
            count[ch - 'a']++; // 'a' 对应索引 0
        }
        
        // 步骤 2:查找首个唯一字符
        for (int i = 0; i < s.size(); i++) {
            if (count[s[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }
};

反转字符串

这道题相对直观,涉及到的 vector 容器后续会详细讲解,现阶段可将其视为字符序列处理。只需维护首尾两个指针,交换元素后分别向中间移动即可。

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. 反转字符串

更多推荐文章

查看全部
  • 汇川机器人软件 RobotLab 常规操作
  • 腾讯云轻量应用服务器部署 OpenClaw 及接入 IM 机器人指南
  • Spring Cloud Alibaba 微服务全栈体系详解
  • 基于 YOLOv26 的无人机遥感环境监测系统
  • Arduino BLDC 机器人 IMU 角度读取与 PID 互补滤波控制
  • AI 工作流实战:基于 Dify 构建日报生成器
  • WebAssembly反编译技术:WABT wasm-decompile完全指南
  • AI 绘画模型格式转换实战:CKPT 与 Safetensors 互转指南
  • 零基础如何构建网络安全知识体系与学习路径
  • Git 入门实战:从环境配置到团队协作
  • 基于 VSCODE、MarscodeAI 与 Embedded IDE 的嵌入式开发实践
  • Rokid JSAR 实战指南:Web 技术栈 AR 开发环境搭建与 3D 时钟项目详解
  • SWE-agent:基于 GPT-4 的开源 AI 程序员系统解析与实战指南
  • C++ 二叉搜索树详解:增删查改与 Key/Value 场景实现
  • Windows 环境下 Git 安装与基础配置指南
  • 远程批量管理 NAS 设备,Ansible 让操作自动化
  • AIGC 与虚拟身份及元宇宙的未来:虚拟人物创作与智能交互
  • Janus-Pro-7B 快速上手:图片问答与文生图功能指南
  • 基于 OpenClaw 搭建 QQ AI 办公机器人:关键词触发与邮件发送
  • 科学机器学习中的物理信息神经网络:现状与展望

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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