【C++】String类经典OJ题目分析

news2025/1/23 6:14:35

目录

    • 字符串相加
    • 字符串里面最后一个单词的长度
    • 反转字符串||
    • 反转字符串中的单词

字符串相加

链接: link
在这里插入图片描述

class Solution {
public:
    string addStrings(string num1, string num2) {
        int next = 0;//存放进位
        int end1 = num1.size()-1;
        int end2 = num2.size()-1;
        int ret = 0;
        string str;//存放相加后的结果
        while(end1>=0||end2>=0)
        {
            int x1 = end1>=0?num1[end1]-'0':0;
            int x2 = end2>=0?num2[end2]-'0':0;
            ret=x1+x2+next;
            next = ret/10;
            ret = ret%10;
            str+=(ret+'0');
            end1--;
            end2--;
        }
        if(next==1)
        {
            str+='1';
        }
        reverse(str.begin(),str.end());
        return str;
    }
};

本题要点
1、两个存放数字的字符串相加,需要向最高位进位,定义next进位位。
2、定义两个尾指针分别指向num1和num2的最后一个字符(不是\0)。
3、循环结束条件以两个字符串中最长的为主,所以循环条件判断使用或运算符,定义两个相加变量时使用三目运算符,这个地方设计的很巧妙。
4、循环结束时如果进位位是1,则str+=1。
5、计算结束后使用reverse逆置得到相加后的字符串。(不使用insert,因为要挪动数据,开销大)

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

链接: link
在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

int main() {
   string str1;
   getline(cin,str1);
   size_t i = str1.rfind(' ');
   if(i!=string::npos)
   {
    string str2 = str1.substr(i+1);
    cout<<str2.size()<<endl;
   }
   else 
   {
    cout<<str1.size()<<endl;
   }
}

本题要点
1、不能使用cin输入一行字符串,因为不能确保该字符串当中是否有空格 getline(cin,str1)(类似于scanf)
2、使用string类中的rfind函数找到最后一个空格,i记录该空格的下标,substr截取第i+1个位置开始到结尾的字符(即最后一个单词)

反转字符串||

链接: link
在这里插入图片描述

class Solution {
public:
   void Reverse(string &s, int start, int end)
   {
      char tmp;
      end--;
      while(start < end)
      {
        tmp = s[start];
        s[start] = s[end];
        s[end] = tmp;
        start++;
        end--;
      }
    }
    string reverseStr(string s, int k) {
      int len = s.size();

      for(int i=0; i<len; i+=2*k)
      {
        if(i+k < len)
        Reverse(s, i, i+k);
        else
        Reverse(s, i, len);
      }
        return s;
    }
};

本题要点: 1、如果剩余字符少于 k 个,则将剩余字符全部反转。也就是说,如果i的位置再加上k超过了len,就将从i的位置开始剩余所有字符串全部反转。
2、如果剩余字符小于 2k但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。这样的话就执行题目中的每计数2k个字符就反转前k个字符。

反转字符串中的单词

链接: link
在这里插入图片描述

class Solution {
public:
    void Reverse(string &s,int start,int end)
    {
      char tmp;
      while(start<end)
      {
        tmp = s[start];
        s[start]=s[end];
        s[end]=tmp;
       start++;
       end--;
      }
    }
    string reverseWords(string s) {
        size_t start = 0;
        size_t end =0;
        while(start<s.size())
        {
          end=s.find(' ',start);
          if(end==string::npos)
          {
            end = s.size();
            break;
          }
          Reverse(s,start,end-1);
          start=end+1;
        }
          Reverse(s,start,end-1);
          return s;
    }
    
};

本题要点
1、先找空格再将单词翻转。
2、从start位置开始找空格,如果没有找到证明该字符串没有空格,则跳出循环直接翻转。
3、找到一个翻转一个,并且将start的值置为end+1,下次再从start的位置开始找空格。

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

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

相关文章

安全测试工具,自动发现网站所有URL!

作为一个安全测试人员来说&#xff0c;首先要拿到网站所有url&#xff0c;然后根据拿到的url进行渗透测试进行漏洞挖掘。本文给大家介绍的是如何拿到一个网站所有的url。 深度爬取层级控制 现在我也找了很多测试的朋友&#xff0c;做了一个分享技术的交流群&#xff0c;共享了很…

Android Glide自定义AppCompatImageView切分成若干小格子,每个小格子onDraw绘制Bitmap,Kotlin(1)

Android Glide自定义AppCompatImageView切分成若干小格子&#xff0c;每个小格子onDraw绘制Bitmap&#xff0c;Kotlin&#xff08;1&#xff09; 垂直方向的RecyclerView&#xff0c;每行一个AppCompatImageView&#xff0c;每个AppCompatImageView被均匀切割成n个小格子&#…

求职招聘小程序源码系统 全开源源代码:找工作+招人才 平台级别运营版 附带完整的搭建教程

在当前的求职招聘市场中&#xff0c;尽管存在大量的求职者和招聘者&#xff0c;但依然存在着信息不对称、沟通不畅等问题。小编来给大家分享一款求职招聘小程序源码系统&#xff0c;旨在提供一个高效、便捷、安全的求职招聘平台。 以下是部分代码示例&#xff1a; 系统特色功能…

C#事件的本质

event字段本质就是对委托进行私有访问限制&#xff0c;事件的本质就是委托&#xff0c;只不过系统会对用event字段修饰的委托进行了特殊处理&#xff0c;比如自动生成一个私有的委托变量&#xff0c;添加两个事件访问器&#xff0c;同时禁止外部类对事件的Invoke等方法调用。 …

Android的前台服务

概述 前台服务是用户主动意识到的一种服务&#xff0c;因此在内存不足时&#xff0c;系统也不会考虑将其终止。前台服务必须为状态栏提供通知&#xff0c;将其放在运行中的标题下方。这意味着除非将服务停止或从前台移除&#xff0c;否则不能清除该通知。 在 Android 8.0&…

用100ask 6ull配合 飞凌 elf1的教程进行学习的记录 - ap3216

100ask板子 不用改 ap3216.c "ap3216creg.h" 添加到drivers/misc 从这抄的: https://gitee.com/flameboyence/linux_driver_example/tree/master/22_i2c #include <linux/types.h> #include <linux/kernel.h> #include <linux/delay.h> #includ…

java第三十课

电商项目&#xff08;前台&#xff09;&#xff1a; 登录接口 注册接口后台&#xff1a; 注册审核&#xff1a;建一个线程类 注意程序中的一个问题。 这里是 5 条记录&#xff0c;2 条记录显示应该是 3 页&#xff0c;实际操作过程 有审核机制&#xff0c;出现了数据记录动态变…

H5ke13-1浏览器处理异常

window对应的error没有event对象 window对应的error他接收三个参数,msg,url,行号 return false return true 1就不会返回错误 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title>&…

基于Java SSM框架实现超市进销存购物商城管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现超市进销存购物商城管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;社区生活超市管理系统当然也不能排除在外。社区生活超市管理系统…

Java动态代理实现与原理详细分析

Java动态代理实现与原理详细分析 关于Java中的动态代理&#xff0c;我们首先需要了解的是一种常用的设计模式–代理模式&#xff0c;而对于代理&#xff0c;根据创建代理类的 时间点&#xff0c;又可以分为静态代理和动态代理。 1、代理模式 代理模式是常用的java设计模式&…

线段树基础模板c++

线段树的基础模板代码 #include <bits/stdc.h> using namespace std; #define N 100005 #define int long long#define lc p << 1 // 2*i #define rc p << 1 | 1 // 2*i1int n, m; int w[N];struct node {int l, r, sum, add;} tr[N * 4]; // 构建线段树…

迅软DSE:为企业描绘安全蓝图,构建无忧网络办公天地

企业员工的不规范上网行为已成为管理人员面临的挑战&#xff0c;而利用上网行为管理软件则成为解决问题的最佳途径。 上网行为管理软件具备全面监控功能&#xff0c;可监控QQ、微信、电脑邮件、文件外发等行为&#xff0c;保证监控过程隐蔽而安全。通过实时屏幕监控功能&#…

智能优化算法应用:基于饥饿游戏算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于饥饿游戏算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于饥饿游戏算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.饥饿游戏算法4.实验参数设定5.算法结果6.参考…

【通信原理】数字基带信号传输和码间串扰

一、数字基带信号传输系统的组成二、无码间串扰的基带传输特性三、无码间串扰传输特性的设计

数据结构与算法编程题46

带权有向图邻接矩阵表示 //参考博客&#xff1a;https://blog.csdn.net/qq_54162207/article/details/117414707#include <iostream> using namespace std;#define Maxsize 100 #define VertexmMaxNum 20 #define ERROR 0 #define OK 1 typedef string VertexType; …

nginx遇到的问题和jks密码问题

1&#xff1a;nginx的配置&#xff1a; https 一定得配置 8080 ssl (我没有配置这个) 2&#xff1a;查看jks的密码 keytool -list -keystore secms.jks 让输入密码

【人体解剖学与组织胚胎学】练习二 重点知识点整理及对应习题

胃部 简答题 填空题 肝胆 简答题 填空题 消化道路径 简答题 牙位表示法 思考 [55, 85]都是乳牙&#xff0c;其它都是恒牙&#xff0c;考试中出现时&#xff0c;只需要画出十字&#xff0c;然后按上下对调&#xff0c;左右对调的角度进行观察

草柴返利APP领淘宝天猫优惠券拿购物返利 淘宝天猫订单如何隐藏删除订单记录?

草柴返利APP领淘宝天猫优惠券拿购物返利 手机安装「草柴」返利APP&#xff0c;复制要购买的商品链接到草柴&#xff0c;查询该商品淘宝天猫优惠券及购物返利&#xff0c;确认收货后到草柴返利APP提取返利&#xff1b; 淘宝天猫订单如何隐藏删除订单记录&#xff1f; 1、打开手…

【JavaEE进阶】 Spring 的创建和使⽤

文章目录 &#x1f334;前言&#x1f38b;创建 Spring 项⽬&#x1f6a9;创建⼀个 Maven 项⽬&#x1f6a9;添加 Spring 框架⽀持&#x1f6a9;添加启动类 &#x1f333;存储 Bean 对象&#x1f6a9;创建Bean&#x1f6a9;将 Bean 注册到容器 &#x1f332;获取并使⽤ Bean 对象…

Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道

一、前言 对各种音视频文件格式的支持&#xff0c;是一个播放器的基础功能。一般的音视频文件只有1路流&#xff0c;比如音频文件只有1路音频流&#xff0c;视频文件只有1路音频1路视频流&#xff0c;实践过程中发现&#xff0c;还有一种ts格式的文件&#xff0c;可能有多路流…