当前位置: 首页 > news >正文

《牛刀小试!C++ string类核心接口实战编程题集》


🔥个人主页:K 旺仔小馒头

🍉学习方向:C/C++方向学习者

📖个人专栏:《C语言》《数据结构与算法》《C++知识分享》《C语言实战编程》

⭐️人生格言:‌“何时葡萄先熟透,你要静候再静候”



前言:

C++字符串处理是编程入门与进阶的关键环节,常涉及多种算法思维。本文聚焦4道经典字符串题,用双指针、哈希表等实用方法解题,搭配注释清晰的代码,助力你吃透字符串操作逻辑,提升算法应用能力。


一. 仅仅反转字母【难度:简单】

描述:

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s 。

知识点:

以后交换不需要自己写了,库里面直接写了一个函数模板,直接用,任何类型都可以交换

class Solution {
public:bool isLetter(char ch){if(ch >= 'a' && ch <= 'z')return true;if(ch >= 'A' && ch <= 'Z')return true;return false;}string reverseOnlyLetters(string s) {size_t begin = 0,end = s.size()-1;while(begin < end){ while(begin < end && !isLetter(s[begin])){++begin;}while(begin < end && !isLetter(s[end])){--end;}swap(s[begin],s[end]);++begin;--end;}return s;}
};

二. 字符串中的第一个唯一字符【难度:简单】

描述:

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

知识点:

string这个部分,真要遍历,要么用下标+[],要么用范围for,很少用迭代器

class Solution {
public:int firstUniqChar(string s) {int count[26] = {0};//统计出字符出现的次数for(auto ch : s){count[ch - 'a']++;}for(size_t i = 0; i < s.size(); i++){if(count[s[i] - 'a'] == 1)return i;}return -1;}
};

三. 字符串最后一个单词的长度【难度:简单】

描述

对于给定的若干个单词组成的句子,每个单词均由大小写字母混合构成,单词间使用单个空格分隔。输出最后一个单词的长度。

输入描述:

在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。
除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过 10^3 。

输出描述:

在一行上输出一个整数,代表最后一个单词的长度。

这个题目它是一个标准的IO型(输入、输出)

知识点:

1. rfind -> 倒着找


2. 长度计算,算区间时有一个技巧

[) -> 相减之后是个数  eg:[0,10)  10-0=10

[] -> 相减之后少1个  eg:[0,9]  9-0=9


3. 比如你想输入一个字符串,这里面包含空格,这个空格cin/scanf是拿不进来的

为了解决这个问题:

C++引入一个getline(获取一行)

getline它不会用空格作为终止,它会用换行作为终止

getline(cin, str);
//getline(cin, str, '#');//也可以自定义以什么为终止,这行代码是遇到#才结束
#include <iostream>
#include <string>
using namespace std;int main() 
{string str;//cin >> str;getline(cin,str);size_t pos = str.rfind(' ');if(pos != str.size()){   cout << str.size() - (pos + 1) << endl;}else {cout << str.size() << endl;}
}

四. 字符串相加【难度:简单】

描述:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1,end2 = num2.size() - 1;int carry = 0;string retStr;while(end1 >= 0 || end2 >= 0){int val1 = end1 >= 0 ? num1[end1--] - '0' : 0;int val2 = end2 >= 0 ? num2[end2--] - '0' : 0;int ret = val1 + val2 + carry;carry = ret / 10;ret = ret % 10;//头插retStr.insert(0,1,'0'+ret);}//最后还有一个进位要头插if(carry)retStr.insert(0,1,'1');return retStr;}
};

这段代码的时间复杂度:O(N^2)

因为头插每次要挪动数据

1+2+3+...+N-1

上述代码可以优化,从O(N^2)(头插)-> O(N)(尾插+逆置)

优化:

现在逆置(reverse)不需要自己写了,算法库里面有

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1,end2 = num2.size() - 1;int carry = 0;string retStr;retStr.reserve(max(num1.size(),num2.size())+1);//算法库里面也有max的函数while(end1 >= 0 || end2 >= 0){int val1 = end1 >= 0 ? num1[end1--] - '0' : 0;int val2 = end2 >= 0 ? num2[end2--] - '0' : 0;int ret = val1 + val2 + carry;carry = ret / 10;ret = ret % 10;//尾插retStr += ('0'+ret);}//最后还有一个进位要尾插if(carry)retStr += '1';reverse(retStr.begin(),retStr.end());//逆置return retStr;}
};

结尾:

往期精选:

《别再重复写代码!C++模板初阶:一个模板适配多种数据类型》

《STL与字符编码:打好C++开发基石,避坑进阶两不误》

《C++ string类深度解析:核心接口全方位精讲与掌握》

结语:4道字符串题的解析,覆盖了C++字符串处理的常见场景与核心技巧。从优化反转效率到精准统计字符,从定位关键信息到模拟运算过程,每道题的思路都可复用。希望这些题解能帮你梳理知识、强化思维,在后续编程中更从容地应对字符串相关问题。

http://www.dtcms.com/a/435091.html

相关文章:

  • 做视频网站资源采集软件app定制开发
  • 【原创】SpringBoot3+Vue3商品信息管理系统
  • 3 阐述网站建设的步骤过程哪种网站开发简单
  • Spring Boot 热部署配置与自定义排除项
  • B007基于博途西门子1200PLC四节传送带控制系统仿真
  • C++11新特性解析与应用(1)
  • 【LangChain】P7 对话记忆完全指南:从原理到实战(下)
  • 上海建设房屋网站下载好了网站模板怎么开始做网站
  • 远程智能康养实训室:训练学生驾驭物联网,服务未来居家康养新时代
  • ⚡ WSL2 搭建 s5p6818 Linux 嵌入式开发平台(part 1):环境准备与架构设计
  • 学科建设网站wordpress 主体安装
  • 如何免费建立自己的网站中国建设摩托车
  • 主机服务器网站 怎么做孝义网站建设
  • 快速搭建企业网站阿里虚拟机建设网站
  • 山西建设机械网站首页备案添加网站
  • 店面建设网站的必要性58同城装修设计师
  • C语言笔记
  • 23ICPC合肥站补题
  • LR算法中反向最右推导(Reverse RightMost Derivation)
  • 企业网站托管服务常用指南wordpress ssl证书
  • 专注于响应式网站开发高端定制网站建设高端旅游定制
  • django网站开发教程杭州最便宜的网站建设
  • rpm包的安装方法
  • 内网环境下离线安装软件的完美解决方案(以MySQL为例)
  • 构造函数和初始化列表的关系
  • 济南网站优化建设局网站打不开
  • LabVIEW 系统稳定性计算
  • Rocky Linux 8 安装与配置 TigerVNC 服务完整操作文档
  • Testify Go测试工具包入门教程
  • 南阳网站建设xihewh成都网站建设公司有哪几家