【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

在 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
AI+游戏开发:如何用 DeepSeek 打造高性能贪吃蛇游戏

AI+游戏开发:如何用 DeepSeek 打造高性能贪吃蛇游戏

文章目录 * 一、技术选型与准备 * 1.1 传统开发 vs AI生成 * 1.2 环境搭建与工具选择 * 1.3 DeepSeek API 初步体验 * 二、贪吃蛇游戏基础实现 * 2.1 游戏结构设计 * 2.2 初始化游戏 * 2.3 DeepSeek 生成核心逻辑 * 三、游戏功能扩展 * 3.1 多人联机模式 * 3.2 游戏难度动态调整 * 3.3 游戏本地保存与回放 * 3.4 跨平台移植 * 《Vue.js项目开发全程实录/软件项目开发全程实录》 * 编辑推荐 * 内容简介 * 作者简介 * 目录 一、

By Ne0inhk
DeepSeek-R1是真码农福音?我们问了100位开发者……

DeepSeek-R1是真码农福音?我们问了100位开发者……

从GitHub Copilot到DeepSeek-R1,AI编程工具正在引发一场"效率革命",开发者们对这些工具的期待与质疑并存。据Gartner预测,到2028年,将有75%的企业软件工程师使用AI代码助手。 眼看着今年国产选手DeepSeek-R1凭借“深度思考”能力杀入战场,它究竟是真码农福音还是需要打补丁的"潜力股"? ZEEKLOG问卷调研了社区内来自全栈开发、算法工程师、数据工程师、前端、后端等多个技术方向的100位开发者(截止到2月25日),聚焦DeepSeek-R1的代码生成效果、编写效率、语法支持、IDE集成、复杂代码处理等多个维度,一探DeepSeek-R1的开发提效能力。 代码生成效果:有成效但仍需提升 * 代码匹配比例差强人意 在代码生成与实际需求的匹配方面,大部分开发者(58人)遇到生成代码与实际需求完全匹配无需修改的比例在40%-70%区间,12人遇到代码匹配比例在70%-100%这样较高的区间。 然而,有30人代码匹配比例低于40%。这说明DeepSeek-R1在代码生成方面有一定效果,但在部分复杂或特定场景下,仍有很大的提升空间。

By Ne0inhk
[DeepSeek] 入门详细指南(上)

[DeepSeek] 入门详细指南(上)

前言 今天的是 zty 写DeepSeek的第1篇文章,这个系列我也不知道能更多久,大约是一周一更吧,然后跟C++的知识详解换着更。 来冲个100赞兄弟们 最近啊,浙江出现了一匹AI界的黑马——DeepSeek。这个名字可能对很多人来说还比较陌生,但它已经在全球范围内引发了巨大的关注,甚至让一些科技巨头感到了压力。简单来说这 DeepSeek足以改变世界格局                                                   先   赞   后   看    养   成   习   惯  众所周知,一篇文章需要一个头图                                                   先   赞   后   看    养   成   习   惯   上面那行字怎么读呢,让大家来跟我一起读一遍吧,先~赞~后~看~养~成~习~惯~ 想要 DeepSeek从入门到精通.pdf 文件的加这个企鹅群:953793685(

By Ne0inhk