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 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;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu24.04即将发布,支持Linux内核6.8。该版本会有哪些亮点?

更多内容在 Canonical 计划 2024 年 4 月发布 Ubuntu 24.04 LTS 发行版&#xff0c;将获得长达 12 年的支持。Ubuntu 24.04 LTS&#xff0c;代号“Noble Numbat”&#xff0c;是Ubuntu发行版的最新长期支持&#xff08;LTS&#xff09;版本。12年的支持意味着你会得到 五年的维…

谷歌DeepMind推出3D游戏AI代理SIMA,实现自然语言操控游戏新纪元

近日&#xff0c;谷歌DeepMind研究团队推出了一款名为SIMA的创新AI代理&#xff0c;专为3D游戏环境设计。这款代理独树一帜&#xff0c;无需访问游戏源代码或依赖定制API&#xff0c;仅通过输入图像和简单的自然语言文本指令&#xff0c;便能实现与人类玩家相当的游戏操作。 AI…

C++有关内存的那些事

个人主页&#xff1a;PingdiGuo_guo 收录转栏&#xff1a;C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…

计算机硕士,毕业直接后端开发岗,选择C++还是java?

我自己是一名工作多年的C程序员&#xff0c;大学学习的编程语言就是C/C&#xff0c;参加工作后自学了Python、Java、Golang等语言。 现在从事自动驾驶行业的工作&#xff0c;工作中主要使用的编程语言是C和Python。在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整…

canopen使用

CAN 总线协议 1&#xff09;、启动SDO 下载协议 ccs&#xff1a;客户端 指定命令 1&#xff1a;开始下载请求 •scs&#xff1a;服务器命令符 3&#xff1a;开始下载响应 •n&#xff1a;只有当e 1和s1&#xff0c;否则为0。如果有效则表示字节在d不这样做的数量有效包…

外包干了20天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入杭州某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了2年的功能测试…

3个好用的WP免费主题

免费wordpress模板下载 高端大气上档次的免费wordpress主题&#xff0c;首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html 经典的红色免费wordpress主题 这是一款经典的免费wordpress主题&#xff0c;被广泛应用于多个行业的网站。 https…

SQL:窗口函数之OVER()

窗口函数 通用格式 “函数 OVER (PARTITION BY 分组 ORDER BY 排序依据 升降序)”。 这里记录下OVER() 以及搭配LEAD/LAG函数的使用方法&#xff08;执行平台Impala&#xff09; 目录 OVER函数1、不加条件的OVER函数——得到所有的汇总结果2、仅有排序的OVER函数——得到按顺序…

HAL库W25Q16+fatfs文件系统移植

配置时钟树 配置时钟树时钟频率为72 SPI1外挂SPIflash 其他不用改这里挂的是一个W25Q16 文件分类管理 生成原始代码 加入W25Q16的驱动代码 忘记配片选线了&#xff0c;这里加上 /*Configure GPIO pin : PtPin */GPIO_InitStruct.Pin GPIO_PIN_4;GPIO_InitStruct.Mode GPIO_…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.5 科目余额查询理

SAP提供了强大的科目余额查询功能&#xff0c;可以查询科目的借贷方及余额&#xff0c;同时&#xff0c;也可以追溯到明细凭证。在凭证记账后&#xff0c;科目的余额就会同步得到更新。预制凭证是不更新科目余额的。 科目余额查询及追溯的操作步骤 路径&#xff1a;SAP菜单&g…

我的春招求职面经

智能指针在面试时经常被问到&#xff0c;最近自己也在写&#xff0c;有一点思考&#xff0c;于是找到了这样一个题目&#xff0c;可以看看&#xff0c;上面这个代码有什么问题&#xff1f;留言区说出你的答案吧&#xff01; 最后分享一下之前的实习->春招->秋招等文章汇总…

atomgit访问令牌就创建的时候显示一下

AtomGit 是开放原子开源基金会提供的代码托管平台&#xff0c;帮助团队更快、更安全地交付更好的软件。 在创建访问令牌的时候&#xff0c;发现创建之后点不出来令牌字段&#xff0c;不像其它网站会在令牌列表那里显示出来。在“我的令牌”页面只能看到令牌名字和权限&#xff…

设计模式—组合模式

定义: 组合模式&#xff08;Composite Pattern&#xff09;又称为合成模式、部分-整体模式&#xff08;Part-Whole&#xff09;&#xff0c;主要用来描述部分与整体的关系。 定义&#xff1a;将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使用户对单个对象和…

适用于vue3的vant4组件 没有日期时间选择器

项目中需要用到日期和时间一同选择的场景 本来想用 如下代码 van-datetime-picker 发现咋整也不好使 刚开始还以为是引入的问题 后来发现是vant4根本就没这玩应了… <van-datetime-pickerv-model"currentDate"type"datetime"title"选择完整时间&q…

数据结构之排序一

目录 1.排序 一.概念及其分类 二.排序的稳定性 2.插入排序 一.基本思想 二.插入排序的实现 复杂度 稳定性的分析 3.希尔排序 一.预排序代码的实现 二.希尔排序代码实现 复杂度分析 4.clock函数 1.排序 一.概念及其分类 说到排序&#xff0c;我们都不陌生&#x…

向上生长

&#xff08;1&#xff09; 我记得2010年&#xff0c;在中国的苹果应用商店里&#xff0c;充斥的App还有很多&#xff1a;日历App、天气App、电池省电App、记事本App…。但这已经过去了2007-2008-2009三年&#xff0c;这些应用仍然很欢。 我有一个朋友算是中国最早一批开发iOS …

vue.js+element-ui的基础表单

遇到原生的html小型单页应用时&#xff0c;是脱离了vue框架&#xff0c;而我们又想使用vue的语法和element的组件加快我们的开发速度&#xff0c;这个时候就需要引用他们的js了。技术栈即htmlvue.jselement-ui。而使用它们的方法也很简单&#xff0c;引入对应的js和css文件即可…

博世力士乐发布在线配置液压系统3D CAD目录

博世力士乐自1795从美因河畔洛尔的一个铸铁铸造厂到20世纪50年代进入液压市场&#xff0c;2001年&#xff0c;曼内斯曼力士乐与博世自动化的合并&#xff0c;推动了驱动与控制解决方案的所有相关技术无缝集成的新水平。如今博世力士乐独特的行业专业知识已成为量身定制解决方案…

手上积累了一些企业目录,但是没有电话,在企XX天X查也没找到咋办?如何快速精准批量查询其他平台上查不到的企业电话?

在B端业务场景中&#xff0c;长期需要进行拓客。有时候是企业提供客户的联系方式&#xff0c;有时候是销售利用自己的人脉资源&#xff0c;对于资源不多的销售就需要查找到目标客户的联系方式。长期来说&#xff0c;销售都需要进行拓客&#xff0c;自己通过社交&#xff0c;网络…

下载 macOS 系统安装程序的方法

阅读信息&#xff1a; 版本&#xff1a;0.4.20231021 难度&#xff1a;1/10 到 4/10 阅读时间&#xff1a;5 分钟 适合操作系统&#xff1a;10.13, 10.14, 10.15, 11.x, 12.x&#xff0c;13.x, 14 更新2023-10-21 添加Mist的介绍支持版本的更新&#xff0c;13.x&#xff0…