当前位置:首页 » 《随便一记》 » 正文

【C/C++】速通涉及string类的经典编程题

6 人参与  2024年09月22日 09:21  分类 : 《随便一记》  评论

点击全文阅读


【C/C++】速通涉及string类的经典编程题

一.字符串最后一个单词的长度代码实现:(含注释) 二.验证回文串解法一:代码实现:(含注释) 解法二:(推荐)1. 函数isalnum介绍:2. 函数tolower介绍:3. 代码实现: 三.翻转字符串II:区间部分翻转代码实现:(含注释) 四.翻转字符串III:翻转字符串中的单词代码实现:(含注释)

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

本题牛客网链接:
在这里插入图片描述

原理:从字符串最后倒着往前遍历,遇到第一个空格标记其下标

代码实现:(含注释)

#include <iostream>using namespace std;#include <string>int main() {    string s;    getline(cin, s);//读取一整行数据,遇到空格或“\0”照样读取    int ret = s.rfind(' ', s.size() - 1);    if(ret == s.size())//只有一个字符时    printf("%lld",ret);    else    printf("%lld",(s.size() - 1 - ret));}

二.验证回文串

本题LeetCode链接:
在这里插入图片描述

解法一:

原理:先将字符串中大写字符转化为对应小写字符,然后将数字和字符(注意不可拷贝空格)拷贝到tmp对象中,用双指针分别从tmp对象首尾开始向字符串中间遍历,遍历过程中判断两指针指向字符是否相等

代码实现:(含注释)

class Solution {public:bool isPalindrome(string s) {    string tmp;    //将大写字母转化为小写    for (int i = 0; i < s.size(); i++)    {        if (s[i] >= 'A' && s[i] <= 'Z')        {            s[i] += 32;        }    }    int k = 0;    for (int k = 0; k < s.size(); k++)//看题看题!!!字符和数字都要拷贝到tmp中    {        if ((s[k] >= 'a' && s[k] <= 'z') ||(s[k] >= '0' && s[k] <= '9')         && s[k] != ' ' )            tmp += s[k];    }    //双指针法    int begin = 0, end = tmp.size() - 1;    while (begin < end)    {        if (tmp[begin] != tmp[end])            return false;        begin++;        end--;    }    return true;}};

解法二:(推荐)

原理:充分运用库函数的特性,再结合反向迭代器

1. 函数isalnum介绍:

函数原型:bool isalnum(auto ch);函数功能:
(1) 检查范围‌:isalnum函数检查传入的字符是否属于字母(大写或小写)或数字(0-9)的ASCII码范围。
‌(2)返回值‌:如果字符是字母或数字,则返回非零值(通常为真值);否则,返回零(表示假值)。

2. 函数tolower介绍:

函数原型:auto tolower(auto ch);函数功能:将大写字母转换为小写字母。

3. 代码实现:

class Solution {public:bool isPalindrome(string s) {    string tmp;    for(auto ch : s)    {        if(isalnum(ch))//函数isalnum        {            tmp += tolower(ch);//函数tolower        }    }    string tmp_rev(tmp.rbegin(), tmp.rend());    return tmp == tmp_rev;}};

三.翻转字符串II:区间部分翻转

本题LeetCode链接:
在这里插入图片描述

原理:充分运用reverse函数,特殊情况特殊处理,注意把控区间边界

代码实现:(含注释)

class Solution {public:  string reverseStr(string s, int k) {    int ps = 0;    if(k > s.size())//特殊情况一    {        reverse(s.begin(), s.end());        return s;    }    if(ps + 2*k > s.size())//特殊情况二    {        reverse(s.begin(), s.begin() + k);        return s;    }    while (ps + 2*k <= s.size())//边界问题等于不可少    {        reverse(s.begin() + ps, s.begin() + ps + k);        ps += 2 * k;        if (ps + k > s.size())        {            reverse(s.begin() + ps, s.end());        }        if (ps + 2 * k > s.size() && ps + k <= s.size())//边界问题等于不可少        {            reverse(s.begin() + ps, s.begin() + ps + k);        }    }    return s;}};

四.翻转字符串III:翻转字符串中的单词

本题LeetCode链接:
在这里插入图片描述

原理:充分运用reverse函数,首尾单词特殊处理,注意区间边界

代码实现:(含注释)

class Solution {public:    string reverseWords(string s) {        int len = 0;//单词的长度        int k = 0;//单词首字母下标        for(int i = 0; i < s.size(); i++)        {            if(k == 0 && s[i] == ' ')//解决第一个单词的颠倒            {                len = i - k;                 reverse(s.begin() + k, s.begin() + k + len );                k = i;            }            if(s[i] == ' ' )//解决中间单词的颠倒            {                len = i - k + 1;                reverse(s.begin() + k , s.begin() + k + len );                k = i;            }        }        //解决最后一个单词的颠倒        int j = s.rfind(' ', s.size() - 1);        reverse(s.begin() + j + 1, s.end());                return s;    }};

点击全文阅读


本文链接:http://zhangshiyu.com/post/162999.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 前传程予夏沈昭序续集(程予夏沈昭序)终章阅读极简(程予夏沈昭序)
  • 厉总,夫人带三崽杀回来了(厉景深苏晚晴)全书免费_(厉景深苏晚晴)厉总,夫人带三崽杀回来了后续(厉景深苏晚晴)
  • 室友要往脸上打生长因子,我拍手叫好(徐甜甜崔哲华)_室友要往脸上打生长因子,我拍手叫好徐甜甜崔哲华
  • 为了给侄子治病,老公害我流产七次更新_陆寒川陆总林瑾无错版_小说后续在线阅读_无删减免费完结_
  • 填错志愿后,我成了活神仙章节目录_顾言姜澈林晓晓优质全文_小说后续在线阅读_无删减免费完结_
  • 沈亦初秦景泽后续(以后,她都不要再喜欢他了)(沈亦初秦景泽)整本畅享在线+无广告结局
  • 独家猎户夫君你轻点宠小说(云柔苏安)(猎户夫君你轻点宠)电子书畅享阅读
  • 全网首发容止洛云曦小说叫什么(他死后女帝火葬场了)(容止洛云曦)全书阅读纯净阅读
  • 周砚川战景熙小说章节目录+序章(离婚后,保镖前夫他成了财阀大佬)全书畅享在线
  • 碎骨惨死后,我与宿敌联手弑夫证道特别篇章节目录+章节前文(齐南韵柳苑云)TXT清爽版在线
  • 重生八零年代点天灯后,崇洋***的养妹疯了章节目录_肖颖芝江天肖星苒书荒_小说后续在线阅读_无删减免费完结_
  • 最新章节(姜小九徐琛)霸婚总裁小蛮妻:结局+番外精品选集附加章节列表

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1