C++初阶:string类相关练习题

目录

  • 1. 字符串相加
  • 2. 反转字母
  • 3. 字符串中唯一字母
  • 4. 字符串中最后一个单词
  • 5. 验证回文串
  • 6. 反转字符II
  • 7. 反转字符串中的单词
  • 8. 字符串相乘

1. 字符串相加

  1. 题目信息:
    在这里插入图片描述
  2. 题目连接:
    字符串相加
class Solution 
{
public:string addStrings(string num1, string num2) {int ent = 0;int count1 = 0;int count2 = 0;string sum;auto it1 = num1.rbegin();auto it2 = num2.rbegin();while(it1 < num1.rend() || it2 < num2.rend()){if(it1 < num1.rend()){count1 = *it1 -'0';}if(it2 < num2.rend()){count2 = *it2 - '0';}count1 = count1 + count2 + ent;ent = count1 / 10;count1 %= 10;sum.push_back(count1 + '0');count1 = 0;count2 = 0;if(it1 < num1.rend()){it1++;}if(it2 < num2.rend()){it2++;}}if(ent){sum.push_back(ent + '0');}auto it3 = sum.begin();auto it4 = sum.end() - 1;while(it3 < it4){swap(*it3,*it4);it3++;it4--;}return sum;}
};

2. 反转字母

  1. 题目信息:
    在这里插入图片描述
  2. 题目连接:
    反转字母
class Solution 
{
public:string reverseOnlyLetters(string s) {//快排hoare法单趟string ret(s);int left = 0;int right = ret.size() - 1;while(left < right){while(left < right && !isalpha(ret[right])){right--;}while(left < right && !isalpha(ret[left])){left++;}swap(ret[left], ret[right]);left++;right--;}return ret;}
};

3. 字符串中唯一字母

  1. 题目信息:
    在这里插入图片描述
  2. 题目连接:
    字符串中唯一字母
  3. 思路:暴力求解
class Solution 
{
public:int firstUniqChar(string s) {for (int i = 0; i < s.size(); i++){int flag = 1;//暴力查找for(int k = 0; k < s.size();){if(k == i){k++;continue;}//漏掉前面的字符if(s[i] == s[k]){flag = 0;break;}k++;}//找到存在唯一字符if (flag){return i;}}return -1;}
};

4. 字符串中最后一个单词

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    字符串最后一个单词的长度
int main() 
{string str;//遇到' '字符不停读取,一次读取一行getline(cin, str);int cur = str.length() - 1;int i = 0;while(str[cur] != ' ' && cur >= 0){cur--;i++;}cout << i;return 0;
}

5. 验证回文串

  1. 题目信息:
    在这里插入图片描述 2. 题目链接:
    验证回文串
class Solution 
{
public:bool isPalindrome(string s) {string copy_s(s);auto e = copy_s.begin(); while(e < copy_s.end()){if(*e >= 'A' && *e <= 'Z'){*e -= 'A' - 'a';}if((*e < 'a' || *e > 'z') && (*e < '0' || *e > '9')){//迭代器失效,漏掉一个位置copy_s.erase(e);}else{e++;}}//reverse//isalnum字符是否为大小写字母或者数字//tolower转小写 toupper转大写//islower isupperauto it1 = copy_s.begin();auto it2 = copy_s.rbegin();while(it1 < copy_s.end()){if(*it1 != *it2){return false;}it1++;it2++;}return true;}
};

6. 反转字符II

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    反转字符II
  3. 思路:一次向后遍历2k个字符,字符数大于k个逆置前k个,不足2k个整体逆置
class Solution 
{
public:string reverseStr(string s, int k) {string rs(s);int len = rs.length();for(int i = 0; i < len; i += 2 * k){reverse(rs.begin() + i, rs.begin() + min(i + k, len));}return rs;}
};

7. 反转字符串中的单词

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    反转字符串中的单词
class Solution 
{
public:string reverseWords(string s) {string rs(s);int n = rs.length();int count = 0;for(int i = 0; i < n; i++){if(rs[i] == ' '){reverse(rs.begin() + count, rs.begin() + i);count = i + 1;}if(i == n - 1){reverse(rs.begin() + count, rs.end());}}return rs;}
};

8. 字符串相乘

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    字符串相乘
  3. 思路:模拟乘法步骤
class Solution 
{
public:string addStrings(string num1, string num2){int ent = 0;int count1 = 0;int count2 = 0;string sum;auto it1 = num1.rbegin();auto it2 = num2.rbegin();while (it1 < num1.rend() || it2 < num2.rend()){if (it1 < num1.rend()){count1 = *it1 - '0';}if (it2 < num2.rend()){count2 = *it2 - '0';}count1 = count1 + count2 + ent;ent = count1 / 10;count1 %= 10;sum.push_back(count1 + '0');count1 = 0;count2 = 0;if (it1 < num1.rend()){it1++;}if (it2 < num2.rend()){it2++;}}if (ent){sum.push_back(ent + '0');}auto it3 = sum.begin();auto it4 = sum.end() - 1;while (it3 < it4){swap(*it3, *it4);it3++;it4--;}return sum;}string multiply(string num1, string num2){//特殊处理if(num1 == "0" || num2 == "0"){return "0";}//模拟乘法的过程int size1 = num1.size();int size2 = num2.size();string ret;//num1 乘 num2for (int i = size1 - 1; i >= 0; i--){string tran;int ent = 0;int part1 = num1[i] - '0';int k = i;for (int j = size2 - 1; j >= 0; j--){//对齐while(k < size1 - 1){tran.push_back('0');k++;}int part2 = num2[j] - '0';int sum = part1 * part2 + ent;int bit = sum % 10;ent = sum / 10;tran.push_back(bit + '0');}//处理进位if (ent){tran.push_back(ent % 10 + '0');ent /= 10;}reverse(tran.begin(), tran.end());ret = addStrings(ret, tran);}return ret;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公司管理-技术VS市场

技术型公司往往会出现这样的场景&#xff1a;市场人员抱怨产品差不好卖&#xff1b;技术人员不给力&#xff0c;项目总验收不了。技术人员抱怨市场人员只管签单&#xff0c;什么都敢答应。这就是矛盾&#xff0c;应该应用矛盾论来解决问题。 产品的发展需要时间、人力的不断投入…

2024龙年新版UI周易测算网站H5源码

支持对接第三方支付 安装方法以linux为例: 1、建议在服务器上面安装宝塔面板,以便操作,高逼格技术员可以忽略这步操作。 2、把安装包文件解压到根目录,同时建立数据库,把数据文件导入数据库 3、修改核心文件config/inc_config.php把数据库信息替换成你的 4、解析域名…

【C语言基础篇】内存处理函数(三)memset的介绍及模拟实现

个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 待补充完善

Java 学习和实践笔记(44):数组的声明定义和使用以及初始化

示例代码&#xff1a; public class TestArray {public static void main(String[] args) {/*测试整数型一维数组*/int[] s;//声明s是一个整数数组类型s new int[10];//将s实例化&#xff0c;也就是分配内存空间&#xff0c;真正创建了这个对象//int[] s new int[10];也可以…

如何设计一个可扩展的Web应用架构?

如何设计一个可扩展的Web应用架构&#xff1f; 设计一个可扩展的Web应用架构是一个复杂而重要的任务&#xff0c;需要综合考虑多个方面&#xff0c;包括技术选型、系统架构、性能优化等。以下是一些关键步骤和策略&#xff0c;可以帮助您设计一个可扩展的Web应用架构&#xff…

Meta 推出SceneScript,一种全新的3D场景重建方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【洛谷 P8709】[蓝桥杯 2020 省 A1] 超级胶水 题解(贪心算法+优先队列+哈夫曼树)

[蓝桥杯 2020 省 A1] 超级胶水 题目描述 小明有 n n n 颗石子&#xff0c;按顺序摆成一排&#xff0c;他准备用胶水将这些石子粘在一起。 每颗石子有自己的重量&#xff0c;如果将两颗石子粘在一起&#xff0c;将合并成一颗新的石子&#xff0c;重量是这两颗石子的重量之和…

Zabbix与Prometheus区别简述

Zabbix与Prometheus区别简述 历史沿革 一、监控工具简介 1、Zabbix https://www.zabbix.com/cn/download Zabbix是传统的监控系统&#xff0c;出现比云原生早&#xff0c;使用的是SQL关系型数据库&#xff1b;开源监控软件&#xff0c;遵守 GPLv2开源协议&#xff0c;起源于…

高架学习笔记之系统分析与设计

目录 一、结构化方法&#xff08;SASD&#xff09; 1.1. 结构化分析方法&#xff08;SA&#xff09; 1.1.1. 数据流图&#xff08;DFD&#xff09; 1.1.2. 实体联系图&#xff08;E-R图&#xff09; 1.1.3. 状态转换图(STD) 1.1.4. 数据字典 1.2. 结构化设计方法&#x…

【wpf应用8】如何让WPF Grid控件根据屏幕尺寸自动调整

简介&#xff1a; 在Windows Presentation Foundation&#xff08;WPF&#xff09;中&#xff0c;Grid控件是一个强大的布局工具&#xff0c;它允许开发者创建复杂且响应迅速的用户界面。在不同的设备和屏幕尺寸上保持良好的布局一致性是一个挑战。本文将介绍如何让Grid控件根据…

Prometheus Grafana 配置仪表板

#grafana# 其实grafana提供了丰富的Prometheus数据源的仪表板&#xff0c;基本上主流的都有&#xff0c;通过下面官方地址可查阅 Dashboards | Grafana Labs 这里举例说明&#xff0c;配置node_exporter仪表板 首先&#xff0c;在上面的网站搜索 node 可以查到蛮多的仪表板…

【现代C++】统一初始化

现代C中的统一初始化&#xff08;Uniform Initialization&#xff09;是C11引入的一项特性&#xff0c;它提供了一种统一的语法来初始化任何类型的对象。统一初始化旨在增强代码的一致性和清晰度&#xff0c;减少传统初始化方式中的歧义。以下是统一初始化的几种用法及相应的示…

【贪心】【回溯】【字符串】2014. 重复 K 次的最长子序列

本文涉及知识点 贪心 回溯 字符串 LeetCode2014. 重复 K 次的最长子序列 给你一个长度为 n 的字符串 s &#xff0c;和一个整数 k 。请你找出字符串 s 中 重复 k 次的 最长子序列 。 子序列 是由其他字符串删除某些&#xff08;或不删除&#xff09;字符派生而来的一个字符串…

小白DB补全计划Day2-LeetCode:SQL基本操作selectJOIN

链接&#xff1a;1683. 无效的推文 - 力扣&#xff08;LeetCode&#xff09;1378. 使用唯一标识码替换员工ID - 力扣&#xff08;LeetCode&#xff09;1068. 产品销售分析 I - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 1683 # Write your MySQL quer…

网络安全笔记-day6,NTFS安全权限

文章目录 NTFS安全权限常用文件系统文件安全权限打开文件安全属性修改文件安全权限1.取消父项继承权限2.添加用户访问权限3.修改用户权限4.验证文件权限5.总结权限 强制继承父项权限文件复制移动权限影响跨分区同分区 总结1.权限累加2.管理员最高权限2.管理员最高权限 NTFS安全…

仿京东项目——京西商城(数据库设计)

文章目录 仿京东——京西商城数据库设计建立E-R图数据库表设计用户表商品表订单表订单详情表评论表购物车表购物车项表 仿京东——京西商城 数据库设计 主要实体有&#xff1a; 用户 用户ID&#xff08;User_ID&#xff09;&#xff1a;唯一标识用户的主键 用户名&#xff0…

同豪BIM模型如何快速修改路面、桥面、梁板颜色

0序 同豪的建模软件&#xff0c;做路桥隧的bim建模&#xff0c;速度很快。缺点就是他们的模型可以认为是没有颜色。只有自带的几种风格、纹理。 部分领导觉得颜色不好看&#xff0c;与背景色对比度不强&#xff0c;甚至甲方也会要求修改模型颜色&#xff0c;使之更醒目&#x…

数据集预处理

1.目标 将数据集图像通过预处理方法调整为统一大小尺寸&#xff0c;以便于后续模型提取特征。 2.常见的图像数据预处理方法 2.1图像尺度变换 1.图像缩放&#xff08;使用OpenCV库&#xff09;&#xff1a; import cv2def resize_image(image, width, height):resized_imag…

FFmpeg-- mp4文件合成1:aac和h264封装(c++实现)

文章目录 流程api核心代码muxer.hmuxer.cppaac 和 h264 封装为视频流,封装为c++的Muxter类 流程 分配视频文件上下文 int Init(const char *url); 创建流,赋值给视频的音频流和视频流 int AddStream(AVCodecContext *codec_ctx); 写视频流的head int SendHeader(); 写视频流的…

数字乡村引领新风尚:科技赋能农村实现全面进步

随着信息技术的迅猛发展&#xff0c;数字乡村正成为引领农村全面进步的新风尚。科技作为推动农村发展的强大引擎&#xff0c;正在深刻改变着传统农业的生产方式、农村的社会结构以及农民的生活方式&#xff0c;为农村经济社会的全面进步注入了新的活力和动力。本文将从数字乡村…