• 【C++】string类的使用,小试牛刀


    🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸
    在这里插入图片描述

    一、前提

    在这里插入图片描述

    为什么会出现string类?
    C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数始于字符串是分离开的,不太符合OOP面向对象的思想,而且底层空间需要用户自己管理,稍不留神还会越界访问,所以出现了string类

    二、对string类的应用、小试牛刀

    1.字符串的逆置

    leetcode反转字母
    在这里插入图片描述
    对于这道题,就是判断是不是字母以及停止的条件

    class Solution {
    public:
        string reverseOnlyLetters(string s) {
            if(s.size()==0||s.size()==1)
            return s;
            int left=0;
            int right= s.size()-1;
            while(left<right)
            {
                while(left<right&&!isalpha(s[left]))
                left++;
                while(left<right&&!isalpha(s[right]))
                right--;
                swap(s[left++],s[right--]);
            }
    
            return s;
    
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2.字符串相加

    leetcode字符串相加
    在这里插入图片描述
    用一个字符串来存储每位的值,然后最后使用一个自带的逆置,reverse需要传的是迭代区间

    class Solution {
    public:
        string addStrings(string num1, string num2) {
            int rbegin1 = num1.size()-1;
            int rbegin2 = num2.size()-1;
            string target;
            int mod = 0;
            while(rbegin1>=0||rbegin2>=0||mod)
            {
                if(rbegin1>=0)
                {
                    mod+=(num1[rbegin1]-'0');
                    rbegin1--;
                }
                if(rbegin2>=0)
                {
                    mod+=(num2[rbegin2]-'0');
                    rbegin2--;
                }
                    
                int tmp=mod%10;
                target+=(tmp+'0');
                mod/=10;
            }
            reverse(target.begin(),target.end());
            return target;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

    newcoder字符串最后一个单词的长度
    在这里插入图片描述
    使用cin< 1.scanf(“%[^某个符号位置]”);
    2.getline(istream&in , str)

    #include 
    #include 
    using namespace std;
    
    int main(){
          //getline
          //scanf("%[^某个字符]");
        string str;
        getline(cin,str);
        size_t posEnd;
        for(int i= str.size()-1;i>=0;i++)
        {
            if(isalpha(str[i]))
            {
                posEnd=i;
                break;
            }
        }
        size_t posBegin= str.rfind(' ',posEnd);
        cout<<posEnd-posBegin<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.字符串中第一个的唯一字符

    leetcode字符串中第一个唯一字符

    在这里插入图片描述

    class Solution {
    public:
    	//下面这中方法时间复杂度O(N^2)
    	//最好的还是遍历一遍,用计数的方法
        int firstUniqChar(string s) {
            for(int i=0;i<s.size();i++)
            {
                int pos1 = s.find(s[i]);
                int pos2 = s.rfind(s[i]);
                if(pos1==pos2)
                return i;
            }
            return -1;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、总结

    学到的知识需要应用起来才能知道自己掌握,多做题对于现在的我们而言是很有帮助的,感谢大家的支持,大家一起共同进步!

    在这里插入图片描述

  • 相关阅读:
    微前端三:qiankun 协作开发和上线部署
    试试这2个流动图片制作方法让你的图片动起来吧
    Leetcode-Easy题解1-回文数字
    java多线程这一篇就差不多了
    Jmeter接口测试学习
    刷题5-合并两个有序数组
    队列(C语言实现)
    Ubuntu 22 Python 虚拟环境配置
    Dockerfile详解与实践
    35岁程序员被裁员,这半年他的故事
  • 原文地址:https://blog.csdn.net/zhu_pi_xx/article/details/126678158