【C/C++刷题集】string类(一)

【C/C++刷题集】string类(一)
🫧个人主页:小年糕是糕手

💫个人专栏:《C++》《Linux》《数据结构》《C语言》

🎨你不能左右天气,但你可以改变心情;你不能改变过去,但你可以决定未来!


目录

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

二、验证回文串

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

四、反转字符串


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

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

这里我们看题目有一个注意点就是我们平常使用cin输入时遇到空格会停下来,在例子中我们可以看到他有A B C D,如果我们使用cin在遇到第一个A之后就会报错,所以这里我们要用到另一种输入方式:getline

他并不是一个成员函数,而是输入流的全局函数 getline(istream&, string&)(定义在 <string> 头文件中),作用是从输入流中读取一整行内容,存入 string 对象

// 基础用法(读整行) getline(输入流对象, string对象); // 扩展用法(读至指定终止符) getline(输入流对象, string对象, 终止字符);

思路:我们要读取最后一个单词的长度,大家肯定会想到我们从第一个字母开始遍历,遇到空格就跳过并且记录一下,直到遍历完整个字符串,然后我们就可以知道了有几个空格,找到最后一个空格所处的位置,然后记录下最后一个单词的长度即可,这确实是个可行的方法,但是过程过于冗余了,我们可以利用string类中重载的一个成员函数rfind:

rfind(' ')从字符串末尾往前找第一个空格的位置;如果找到空格:最后一个单词的长度 = 字符串总长度 - (空格位置 + 1)(因为空格的下一个位置是最后一个单词的开头);如果没找到空格(整个字符串是一个单词):最后一个单词的长度 = 字符串总长度

下面我们写代码前再去简单了解一下rfind成员函数:

string类的rfind从字符串末尾向前查找指定内容的成员函数,返回匹配内容的起始下标(若未找到则返回string::npos),常用于定位最后一次出现的字符 / 子串。参数 1:要查找的子串 / 字符(支持stringchar*char);参数 2:查找的结束位置(默认是string::npos,即从字符串末尾开始找);返回值:匹配内容的起始下标;未找到则返回string::npos(一个代表 “无位置” 的常量)
#include<iostream> #include<string> using namespace std; int main() { string str; //cin >> str; //cin检测到空格或换行就会结束,我们这里要使用getline成员函数 getline(cin, str); size_t pos = str.rfind(' '); //找到最后一个空格所处位置 //这里if里面的条件表示没有没找到 -- 找到了 if (pos != string::npos) { cout << str.size() - (pos + 1) << endl; } else { cout << str.size() << endl; } return 0; } 
string::npos 是 C++ std::string 类里的一个静态常量,核心含义是「无效的位置 / 未找到匹配内容」—— 专门用来标记 find/rfind 等查找函数 “没找到目标” 的返回值。



❌ 错误用法:用 pos == -1 判断(因为 size_t 是无符号类型,-1 会被转换成 npos 的值,但写法不规范,且容易出错);

✅ 正确用法:必须用 pos != string::npos 判断 “是否找到”,pos == string::npos 判断 “没找到”。

二、验证回文串

验证回文串

思路:我们主要就是去处理将大写字母转换成小写字母并且将非字母数字的字符全部过滤掉,然后得到一个串,我们知道string定义的一个串是有下标的,这时候我们就可以利用双指针法去遍历这个串判断是否回文

这其实我们可以使用一些函数来帮助我们实现,但是目前阶段我们还是主要看逻辑所以不用这些函数:

class Solution { public: bool isPalindrome(string s) { // 步骤1:过滤+转换(纯ASCII判断,无库函数) string blank_string;//定义了一个空串 for (auto ch : s) { // 判断是否是大写字母 if (ch >= 'A' && ch <= 'Z') { // 大写转小写(ASCII+32) blank_string += ch + 32; } // 判断是否是小写字母 else if (ch >= 'a' && ch <= 'z') { blank_string += ch; } // 判断是否是数字字符 else if (ch >= '0' && ch <= '9') { blank_string += ch; } // 非字母/数字:自动跳过(不加入blank_string) } // 步骤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; } };

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

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

思路:我们要找的是一个字符串,且他告诉我们了这个串只有小写字母,那我们不妨定义一个数组,首先全部初始化为0,然后使用范围for遍历字符串,将每个字母对应存在数组中,统计次数,然后我们就可以通过遍历数组找到数组中第一个出现次数为1的字符并且返回且索引,没有就返回-1

class Solution { public: int firstUniqChar(string s) { //步骤1:统计每个小写字母的出现次数(数组索引对应字符,值对应次数) int count[26] = {0}; // 初始化为0(26个字母) for (char ch : s) { count[ch - 'a']++; // 'a'对应索引0,'b'对应1,以此类推 } // 步骤2:遍历原字符串,找第一个出现次数为1的字符 for (int i = 0; i < s.size(); i++) { if (count[s[i] - 'a'] == 1) { return i; // 返回索引 } } // 步骤3:无唯一字符,返回-1 return -1; } };

四、反转字符串

反转字符串

思路:这其实是这几个题目中最简单的一个,但是题中出现了vector我怕大家不认识就放到了最后,大家先不关注,就当他也是string使用就好了,后续的博客会为大家细致讲解,这题其实不看这个很简单,我们只需要找到最后一个字符位置,和头字符位置互换即可,然后一个++,一个--即可解决问题,这里我们唯一需要注意的就是我们交换的时候可以使用string类中我们说过的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--; } } };

Read more

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

前言:通过结合腾讯云HAI 强大的云端运算能力与DeepSeek先进的 AI技术,本文介绍高效、便捷且低成本的设计一个自己的个人网页。你将了解到如何轻松绕过常见的技术阻碍,在腾讯云HAI平台上快速部署DeepSeek模型,仅需简单几步,就能获取一个包含个人简介、技能特长、项目经历及联系方式等核心板块的响应式网页。 目录 一、DeepSeek模型部署在腾讯云HAI 二、设计个人网页 一、DeepSeek模型部署在腾讯云HAI 把 DeepSeek 模型部署于腾讯云 HAI,用户便能避开官网访问限制,直接依托腾讯云 HAI 的超强算力运行 DeepSeek-R1 等模型。这一举措不仅降低了技术门槛,还缩短了部署时间,削减了成本。尤为关键的是,凭借 HAI 平台灵活且可扩展的特性,用户能够依据自身特定需求定制专属解决方案,进而更出色地适配特定业务场景,满足各类技术要求 。 点击访问腾讯云HAI控制台地址: 算力管理 - 高性能应用服务 - 控制台 腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力,只需简单的几步就能调用DeepSeek - R1

By Ne0inhk
AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-ZEEKLOG博客 目录 引言 一、什么是DeepSeek? 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型训练与优化 4. 自动化推理与部署 5. 行业专用解决方案 三、蓝耘通义万相2.1与DeepSeek的对比分析 3.1 核心区别 3.2 结合使用的优势 四、蓝耘注册流程 五、DeepSeek与蓝耘通义万相2.1的集成应用 5.1 集成应用场景 1. 智能医疗诊断

By Ne0inhk
如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

它是免费的——社区驱动的人工智能💪。         当 OpenAI 第一次推出定制 GPT 时,我就明白会有越来越多的人为人工智能做出贡献,并且迟早它会完全由社区驱动。         但从来没有想过它会如此接近😂让我们看看如何在 Windows 机器上完全免费使用第一个开源推理模型!  步骤 0:安装 Docker 桌面         我确信很多人已经安装了它,所以可以跳过,但如果没有 — — 这很简单,只需访问Docker 的官方网站,下载并运行安装 👍         如果您需要一些特定的设置,例如使用 WSL,那么有很多指导视频,请查看!我将继续下一步。 步骤 1:安装 CUDA 以获得 GPU 支持         如果您想使用 Nvidia 显卡运行 LLM,则必须安装 CUDA 驱动程序。(嗯……是的,它们需要大量的计算能力)         打开CUDA 下载页面,

By Ne0inhk
在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

本文将分步向您展示如何在本地安装和运行 DeepSeek、使用 CodeGPT 对其进行配置以及开始利用 AI 来增强您的软件开发工作流程,所有这些都无需依赖基于云的服务。  步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT         要在本地运行 DeepSeek,我们首先需要安装Ollama,它允许我们在我们的机器上运行 LLM,以及CodeGPT,它是集成这些模型以提供编码辅助的 VSCode 扩展。 安装 Ollama Ollama 是一个轻量级平台,可以轻松运行本地 LLM。 下载Ollama 访问官方网站:https://ollama.com * 下载适合您的操作系统(Windows、macOS 或 Linux)的安装程序。 * 验证安装 安装后,打开终端并运行: ollama --version  如果 Ollama 安装正确,

By Ne0inhk