C++:string(题目篇)

news2024/10/9 15:23:23

文章目录

  • 前言
  • 一、字符串相加
  • 二、仅仅反转字母
  • 三、字符串中的第一个唯一字符
  • 四、字符串最后一个单词的长度
  • 五、检查字符串是否是回文
  • 六、反转字符串 II
  • 七、反转字符串中的单词 III
  • 八、字符串相乘
  • 总结


前言

学习了string后,我们来学习对应的习题。

在这里插入图片描述


一、字符串相加

字符串相加
在这里插入图片描述

class Solution {
public:
    string addStrings(string num1, string num2) 
    {
       string ret;
       int next = 0;

       int end1 = num1.size() - 1;
       int end2 = num2.size() - 1;
       while(end1 >= 0 || end2 >= 0)
       {
            int n1 = (end1 >= 0) ? num1[end1] - '0' : 0;
            int n2 = (end2 >= 0) ? num2[end2] - '0' : 0;

            int sum = n1 + n2 + next;
            ret.push_back(sum % 10 + '0');
            next = sum / 10;
            end1--; end2--;
       }

       if(next == 1)
       {
            ret.push_back('1');
       }

       reverse(ret.begin(), ret.end());

       return ret;
    }
};

二、仅仅反转字母

仅仅反转字母

在这里插入图片描述

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) {
        if (S.empty())
            return 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;
    }
};

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

字符串中的第一个唯一字符
在这里插入图片描述

class Solution {
public:
    int firstUniqChar(string s) 
    {
        int arr[26] = {0};
        for(auto e : s)
        {
            arr[e - 'a']++;
        }
        
        for(int i = 0; i < s.size(); i++)
        {
            if(arr[s[i] - 'a'] == 1)
                return i;
        }

        return -1;
    }
};

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

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

在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
// 不要使用cin>>line,因为会它遇到空格就结束了
// while(cin>>line)
while(getline(cin, line))
{
size_t pos = line.rfind(' ');
cout<<line.size()-pos-1<<endl;
}
return 0;
}

五、检查字符串是否是回文

检查字符串是否是回文

在这里插入图片描述

class Solution {
public:
    bool isLetterOrNumber(char ch)
    {
        return (ch >= '0' && ch <= '9')
            || (ch >= 'a' && ch <= 'z')
            || (ch >= 'A' && ch <= 'Z');
    }
    bool isPalindrome(string s) {
        // 先小写字母转换成大写,再进行判断
        for (auto& ch : s)
        {
            if (ch >= 'a' && ch <= 'z')
                ch -= 32;
        }
        int begin = 0, end = s.size() - 1;
        while (begin < end)
        {
            while (begin < end && !isLetterOrNumber(s[begin]))
                ++begin;
            while (begin < end && !isLetterOrNumber(s[end]))
                --end;
            if (s[begin] != s[end])
            {
                return false;
            }
            else
            {
                ++begin;
                --end;
            }
        }
        return true;
    }
};

六、反转字符串 II

反转字符串 II

在这里插入图片描述

class Solution {
public:
    string reverseStr(string s, int k) 
    {
        for(int i = 0; i < s.size(); i += 2 * k)
        {
            if(i + k <= s.size())
                reverse(s.begin() + i, s.begin() + i + k);
            else
                reverse(s.begin() + i, s.end());
        }
        return s;
    }
};

七、反转字符串中的单词 III

反转字符串中的单词 III
在这里插入图片描述

class Solution {
public:
    string reverseWords(string s) 
    {
        size_t index = 0, find = 0;
        while(index < s.size())
        {
            find = s.find(' ', index);
            if(find == string::npos)
            {
                reverse(s.begin() + index, s.end());
                break;
            }
            else
            {
                reverse(s.begin() + index, s.begin() + find);
            }
            index = find + 1;

        }
        return s;
    }
};

八、字符串相乘

字符串相乘

在这里插入图片描述

class Solution {
public:

    string addStrings(string& num1, string& num2)
    {
        string ret;
        int next = 0;

        int end1 = num1.size() - 1;
        int end2 = num2.size() - 1;
        while(end1 >= 0 || end2 >=0)
        {
            int n1 = end1 >= 0 ? num1[end1] - '0' : 0;
            int n2 = end2 >= 0 ? num2[end2] - '0' : 0;
            
            int sum = n1 + n2 + next;
            ret.push_back(sum % 10 + '0');
            next = sum / 10;
            end1--;
            end2--;
        }

        if(next == 1)
        {
            ret.push_back('1');
        }

        reverse(ret.begin(), ret.end());

        return ret;
    }

    string multiply(string num1, string num2) 
    {
        if(num1 == "0" || num2 == "0")
        {
            return "0";
        }

        string ans = "0";
        int next = 0;
        int end1 = num1.size() - 1, end2 = num2.size() - 1;

        for(int i = end1; i >= 0; i--)
        {
            string cur;
            for(int j = end1; j > i; j--)
                cur.push_back('0');
            
            int x = num1[i] - '0';
            for(int j = end2; j >= 0; j--)
            {
                int y = num2[j] - '0';
                int sum = 0;
                sum = x * y + next;

                cur.push_back(sum % 10 + '0');
                next = sum / 10;
            }

            while(next != 0)
            {
                cur.push_back(next % 10 + '0');
                next /= 10;
            }

            reverse(cur.begin(), cur.end());
            ans = addStrings(ans, cur);

        }
        return ans;
    }
};

总结

到这里就结束啦,谢谢大家~
在这里插入图片描述

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

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

相关文章

SWIFT Payment

SWIFT stands for Society for Worldwide Interbank Financial Telecommunication SWIFT——环球银行金融电信协会 SWIFT Payment Useful Link ISO 20022https://www.iso20022.org/https://www.swift.com/standards/iso-20022MT and MX Equivalence Tableshttps://www2.swift…

Python验证码识别——前处理

目前不少系统的验证码做得越来越复杂&#xff0c;人眼都难以识别&#xff0c;尤其是QQ之类的验证码&#xff0c;想要识别&#xff0c;太难了。 现在有这样一个验证码&#xff1a; 一般的验证码识别&#xff0c;都是先进行前处理&#xff0c;然后分割&#xff0c;在进行识别。这…

Keysight 是德 EXR608A 实时示波器

Keysight 是德EXR608A 实时示波器 EXR608A、EXR604A EXR408A、EXR404A EXR258A、EXR254A EXR208A、EXR204A EXR108A、EXR104A EXR058A、EXR054A EXR608A Infiniium EXR 系列示波器&#xff1a;6 GHz&#xff0c;8 通道 全部 8 个通道均可提供 6 GHz 的带宽&#xff0c;…

NVLink 和 NVLink Switch

高速、多 GPU 通信的基础模组,助力将大型数据集更快地输入模型并在 GPU 之间快速交换数据。 文章目录 前言一、简介二、NVLink 性能三、NVLink Switch1. 通过 NVLink 通信提高 GPU 吞吐量2. NVIDIA NVLink 交换机四、NVLink Switch规格1. 通过完全连接实现非凡性能2. 功能强大…

智慧出行:数字孪生三维可视化大屏交通管控系统

智慧出行已成为现代城市发展的重要支柱&#xff0c;数字孪生技术在交通领域的应用不断深化。结合三维可视化技术&#xff0c;打造功能强大的大屏交通管控系统&#xff0c;将对城市交通管理带来巨大变革。该系统通过实时监测和数据分析&#xff0c;提供精准的交通状况显示和预测…

湖南(消费者调研)源点咨询 市场调研中关于定性调研的释义

湖南&#xff08;市场洞察&#xff09;源点咨询认为&#xff1a;定性调研是有关大量、详细信息的描述、领会和见解&#xff0c;而不仅仅是一种测量。它不像定量调研那么肤浅&#xff0c;它能提供更多有效的数据。定性调研旨在透过表面现象&#xff0c;超越所谓的"首要&quo…

速度白嫖:Minimax海螺上线图生视频功能

一、什么是Minimax海螺 网址&#xff1a;https://hailuoai.video/ Minimax海螺是一款创新的内容创作工具&#xff0c;专注于将静态图像转化为动态视频。它利用先进的图像处理与生成算法&#xff0c;帮助用户将普通图片迅速转变为引人入胜的短视频&#xff0c;适合社交媒体、…

Java | Leetcode java题解之第458题可怜的小猪

题目&#xff1a; 题解&#xff1a; class Solution {public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}int[][] combinations new int[buckets 1][buckets 1];combinations[0][0] 1;int iterations minutesToTest /…

矿井人员数据集,用于目标检测,深度学习,采用txt打标签,即yolo格式,也有原文件可以自己转换。总共3500张图片的数据量,划分给训练集2446张,

矿井人员数据集&#xff0c;用于目标检测&#xff0c;深度学习&#xff0c;采用txt打标签&#xff0c;即yolo格式&#xff0c;也有原文件可以自己转换。总共3500张图片的数据量&#xff0c;划分给训练集2446张&#xff1a; ### 矿井人员数据集用于目标检测的详细说明 #### 1. …

尚硅谷javaSpring

尚硅谷课件: 分类&#xff1a;尚硅谷Spring6教程 - Lixx Blog - 李晓旭的博客 简介 Java Spring 是一个开源的、全面的企业级应用开发框架&#xff0c;旨在简化企业级应用的开发。Spring 框架最初由 Rod Johnson 在 2002 年发布&#xff0c;并随着时间的推移&#xff0c;它已…

Linux系统和数据库常用的命令2

Linux系统和数据库常用的命令2 1、两台Linux机器ssh免密登录 client端登录server端需要免密&#xff0c;只需把公钥发送到server就可&#xff0c;会在server端生成一个authorized_keys文件 # 108机器上[rootclient ~]# ssh-keygen -t rsa // 非对称算法 Generating public/…

大学生就业招聘:Spring Boot系统的设计与实践

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息&#xff0c;可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

IR2110S的代替品SLM2110CG一款能提供独立的高边、低边输出驱动信号 高低边门极驱动器

SLM2110CG是一款高压、高速的功率MOSFET和IGBT驱动器&#xff0c;它提供独立的高边、低边输出驱动信号。采用专有的高压集成电路和锁存免疫CMOS技术&#xff0c;提供可靠的单芯片驱动方案。逻辑输入电平与标准CMOS或LSTTL输出兼容&#xff0c;最低支持3.3V逻辑。输出驱动器具有…

Linux——定时任务调度

crond 任务调度 基本介绍 快速入门 就会每隔一分钟执行上述命令 crond 时间规则 比如快速入门案例里的 */1 * * * * 表示每隔一分钟执行一次 5个*分别代表分时天月周 crond 应用案例 上图案例2的详细步骤截图如下&#xff1a; at 任务调度 at 定时任务就是在要求的时间只…

刷题 -哈希

面试面试经典 150 题 - 哈希 383. 赎金信 - 一个哈希表搞定 class Solution { public:bool canConstruct(string ransomNote, string magazine) {int hash[26] {0};for (auto& ch : magazine) {hash[ch - a];}for (auto& ch : ransomNote) {if (--hash[ch - a] < …

linux下创建软链接失败

最近在研究isce to stamps,在走流程的过程中,看了b站上Dr.Liu的视频和David Bakert的manual,按照manual进行了参数的设置,接着执行了make_single_reference_stack_isce命令,但是一直报错,发现这个报错还是国庆出去旅游的时候,想着在酒店把这个问题解决掉,但是每天早出晚…

Rust编程中的循环语句

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 6.2 for 循 环 迭代次数是确定/固定的循环称为确定循环。for 循环是一个确定循环…

Ubuntu双卡训练过程中电脑总是突然重启【解决方法】

本来以为是温度过热造成的&#xff0c;发现不是&#xff0c;因为在重启的瞬间&#xff0c;gpu温度并没有特别高。 参见视频如下&#xff1a; 双卡训练过程中gpu温度监测 然后尝试了另一种方法&#xff1a; 限制gpu显卡的功率 具体操作如下&#xff1a; 先检查当前gpu功率限…

Electron构建桌面应用程序,服务于项目的自主学习记录(持续更新...

无所畏惧地面对未知&#xff0c;并将其视为成长的机会 大纲官网快速入门1.安装node.js -- 这里推荐用nvm管理2.脚手架创建3.electron 包安装到应用的开发依赖4.创建主进程(main.js)并启动项目1.创建页面2.配置main.js3.启动项目 -- 效果 进阶 -- 基于项目场景功能使用场景一&am…

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸&#xff08;DrawingDoc&#xff09;中的位置时&#xff0c;就是算不对&#xff0c;明明就4、5行代码&#xff0c;怎么看都是很“哇塞”的&#xff0c;毫无问题的。 但结果就是不对。 那就调试一下吧&#xff0c;调试后发现生成的矩阵很不对劲&#…