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

news2024/12/28 19:17:22

目录

  • 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 isupper
        auto 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 乘 num2
        for (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.coloradmin.cn/o/1537825.html

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

相关文章

PHP自动获取视频时长的方法

摘要 最近在给客户开发短视频项目模块中遇到自动获取上传视频的时长并用于外部展示的需求。 刚开始想到用比较笨的方法&#xff0c;就是上传之前手动写入视频文件的大小&#xff0c;无奈嫌麻烦&#xff0c;寻求其它方法。 也是一个比较笨的方法—— ffmpeg 通过下载 ffmpeg&am…

vue的优缺点有那些 组件常用的有那些?

优点&#xff1a; 组件化开发&#xff0c;提升效率&#xff0c;方便复用&#xff0c;便于协同开发单页面路由易于结合其他的第三方库丰富的api方法轻量高效,虚拟DOMMVVM&#xff0c;数据驱动视图轻量级的框架 缺点&#xff1a; 缺少高阶教程和文档生态环境不如angular和re…

ChatGPTGPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术教程

原文链接&#xff1a;ChatGPTGPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598506&idx2&sn14f96667bfbeba5f51366a1f019e3d64&chksmfa82004dcdf5895bba2784ba10f6715f6f5e4c59c9b1…

ElasticSearch之数据建模

写在前面 本文看下es数据建模相关的内容。 1&#xff1a;什么是数据建模 数据建模是对真实数据的一种抽象&#xff0c;最终映射为计算机形式的表现。其包括如下三个阶段&#xff1a; 1&#xff1a;概念模型 2&#xff1a;逻辑模型 3&#xff1a;数据模型2&#xff1a;es数据…

此站点正在尝试打开 ,chrome/edge 允许http网站打开url schema

正常https链接会有首次允许选项 但http没有&#xff0c;每次都会弹出&#xff0c;非常烦人。 Chrome / Edge 配置 地址栏输入 chrome://flags/搜索Insecure origins treated as secure, 配置允许网站&#xff0c;需要协议和端口再次跳转会显示始终允许选项

(附源码)基于Spring Boot和Vue的前后端分离考研资料分享平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31…

【Godot4.2】2D辅助类Geometry2D入门

概述 Godot4.2提供了一个名叫Geometry2D的类。它提供了一些用于2D几何图形如多边形&#xff08;Polygon&#xff09;、折线&#xff08;PolyLine&#xff09;相关的函数&#xff0c;可以方便实现诸如多边形与多边形或多边形与折线的布尔运算、求交点等。 这是一个非常强大的2…

目标控制器数字孪生系统的研究与设计

文章来源&#xff1a;铁路计算机应用,2023,32(10):36-41. 作者&#xff1a;许婧&#xff0c;杨硕&#xff0c;季志均 摘要&#xff1a;随着目标控制器&#xff08;OC&#xff0c;Object Controller&#xff09;系统在轨道交通领域的推广应用&#xff0c;其硬件投入较高、研发…

css background-color属性无效

因为工作需要&#xff0c;最近在帮H5同事开发几个页面&#xff0c;在使用H5进行如下布局的时候&#xff0c;发现设置 background-color为白色无效。 代码如下&#xff1a; <div class "bottomBar"><div style"position: fixed; left: 20px;">…

解决arco-design下拉框回显id的问题

问题描述 下拉框回显选项中没有的选项&#xff0c;就会出现以下情况&#xff0c;只能把uid回显上去 解决方案 使用ui框架自带的属性fallback-option 用法 按以上操作&#xff0c;即可解决选择框回显uid问题

软考91-上午题-【操作系统】-线程

一、线程的定义 传统的进程有两个基本属性: 可拥有资源的独立单位&#xff1b;可独立调度和分配的基本单位。 引入线程的原因是进程在创建、撤销和切换中&#xff0c;系统必须为之付出较大的时空开销&#xff0c;故在系统中设置的进程数目不宜过多&#xff0c;进程切换的频率…

Day43:WEB攻防-PHP应用SQL注入符号拼接请求方法HTTP头JSON编码类

目录 PHP-MYSQL-数据请求类型 PHP-MYSQL-数据请求方法 PHP-MYSQL-数据请求格式 知识点&#xff1a; 1、PHP-MYSQL-SQL注入-数据请求类型 2、PHP-MYSQL-SQL注入-数据请求方法 3、PHP-MYSQL-SQL注入-数据请求格式 PHP-MYSQL-数据请求类型 SQL语句由于在黑盒中是无法预知写法的…

基于python+vue的BBS论坛系统flask-django-nodejs-php

本系统为用户而设计制作BBS论坛系统&#xff0c;旨在实现BBS论坛智能化、现代化管理。本BBS论坛自动化系统的开发和研制的最终目的是将BBS论坛的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的便利和条件。使BBS论坛系统数字化、…

使用阿里CICD流水线打包Vue项目到阿里的docker镜像私仓,并自动部署到服务器启动服务

文章目录 使用阿里CICD流水线打包Vue项目到阿里的docker镜像私仓&#xff0c;并自动部署到服务器启动服务1、功能实现原理大家可以看我之前的两篇文章2、打包vue项目和打包咱们的Java项目过程差不多相同&#xff0c;大家可以看着上面的Java打包过程进行实验&#xff0c;下面是v…

关于短群签名论文阅读

参考文献为2004年发表的Short Group Signatures 什么群签名&#xff1f; 群签名大致就是由一组用户组成一个群&#xff0c;其中用户对某条消息的签名&#xff0c;改签名不会揭示是哪一个用户签署的&#xff0c;签名只能表明该消息确实是来自该群的签名。对于群还有一个群管理者…

VTK9.2.0+Qt5.14.0 绘制点云

背景 为了显示结构光重建后的点云&#xff0c;开发QT5.14.0VTK9.2.0的上位机软件&#xff0c;用于对结构光3D相机进行控制&#xff0c;并接收传输回来的3D数据&#xff0c;显示在窗口中。 配置QT和VTK VTK9.2.0下载源码&#xff0c;用Cmake编译&#xff0c;编译好的VTK9.2.0…

Nacos介绍和Eureka的区别

Nacos&#xff08;全称为 Alibaba Cloud Nacos&#xff0c;或简称为 Nacos&#xff09;是一个开源的分布式服务发现和配置管理系统。它由阿里巴巴集团开发并开源&#xff0c;旨在帮助开发人员简化微服务架构下的服务注册、发现和配置管理。 1、Nacos 提供了以下主要功能&#…

短视频矩阵系统----源头开发

短视频矩阵源码技术开发要求及实现流程&#xff1a; 短视频矩阵开发要求具备视频录制、编辑、剪辑、分享等基本功能&#xff0c;支持实时滤镜、特效、音乐等个性化编辑&#xff0c;能够实现高效的视频渲染和处理。开发流程主要包括需求分析、技术选型、设计架构、编码实现、测试…

Binance labs孵化的Swan Chain明牌空投测试网零撸教程

简介&#xff1a;Swan Chain 是一个 Layer2云计算网络&#xff0c;可以将数据、计算、带宽和支付集成到一个套件&#xff0c;为Web3项目提供全面的解决方案。 相关概念&#xff1a;云计算、layer2、infrastructure 融资信息&#xff1a;项目在去年获得bi’an领投的300万美元融…