欢迎光临
我们一直在努力

string学习总结

  首先我们来了解一下size 函数:

size 函数有点类似C语言中的strlen计算一个数组的大小,而size用处更灵活,在以后代码中应用会更多。

auto 作为关键字是在C++11中有了全新的定义,自动存储局部变量。要注意的是auto在使用时必须加&,

  如图展示,当遇到比较复杂的数据类型时,用auto会更加方便和简洁,当然,万事万物都不是完美的,这样会减低可读性,所以要添加一些注释来理解是一个不错的选择哦。而在我们学习auto后,之前所学的for循环也得到了升级,可以利用auto会自动到空时停止来进行。

我们在使用auto时加&目的是改变变量的地址,来去改变响应变量的值。

我们也要掌握迭代器的使用,利用string::iterator来去判断一个函数的初莫位置,而rbegin和rend则是反转函数常用依旧是rbegin++;只是位置和输出反向发生了完全相反。

下面我们来对一些string中的函数进行介绍和简单引用:

push_back:主要是用来在一个字符串的最后加一个字符串只能在字符串的末尾哦。并且只能加一个字符。

而append函数的作用是在一个字符串的最后加一个字符串,append()的括号中可以是一个字符串的名称,也可以是一个字符串注意的是字符串要有双引号。

而operate+=函数,我认为更加简单和应用性会更强一些,后面直接加一个字符或者字符串,与append函数和push_back()函数作用效果类似。

而find(a,b)函数,第一个变量为自己想要查找的字符,而第二个是从第几个开始寻找,如果找到就会返回相应的下标,如果没有找到就会返回string::npos可以利用if语句来进行判断是否找到。

与fing函数相近还有rfing函数,区别在于向前查找,输出结果是从第一个位置开始向前查找的字符距离,如果没有找到结果,也会返回string::npos.

substr(a,b)函数是用来截取字符串的一部分,从a的第一个位置开始向后截取b个字符串。

erase函数则是用来删除字符串的从第a个位置来开始,向后删除b个字符串。

我们来完成如何对一个字符串是否回文来经行判断:

#include<iostream>
#include<map>
#include<string>
using namespace std;

class solution 
{
public:
    bool isletter(char ch)
    {
        return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
    }
    bool zhuan(string s) {
        for (auto& ch : s) {
            if (ch >= 'a' && ch <= 'z') {
                ch -= 32;
            }
        }
        int begin = 0;
        int end = s.size() – 1;
        while (begin < end) {
            while (begin < end&&!isletter(s[begin])) {
                begin++;
            }
            while (begin < end && !isletter(s[end])) {
                end–;
            }
            if (s[begin] != s[end]) {
                return false;
            }
            else {
                begin++;
                end–;
            }
            return true;
        }
    }
};

int main()
{
    string s = "asdfggfdsa";
    solution a;
    if (bool result = a.zhuan(s)) {
        cout << "是回文数" << endl;
    }
    else {
        cout << "不是回文数" << endl;
    }
    return 0;
}

来借助我们之前学到的类和对象进行会简化代码和提高代码的可读性。

  我们接下来对拷贝进行简单介绍,拷贝主要分为浅拷贝,深拷贝,写实拷贝(简单了解即可):

浅拷贝:

多个对象共用一份资源,当一个对象销毁时就会导致这个资源被销毁掉,而其他对象不知道这个对象已经被销毁掉,接着去访问的话,就会产生违规访问。

深拷贝:

每个对象都有一个独立的资源,不会与其他对象共享。就避免了因为资源共享而出现内存泄露的问题。

写实拷贝:

在浅拷贝的基础上增加了引用计数的方法来实现。每当有人使用时,数量会加一,当对象被销毁时,就会减一。

最后的话,我们来补充this指针的用法哈:

由编译器自动传递给类的非静态对象,本质是成员函数的隐藏形参。如:p(string name)并且在类的private中已经有了name变量,this->name=name,第一个指的是private中的name,而第二个则指的是形参。而在我们使用时经常与const指针一起,当成员函数后加const,this指针会被限定为指向常量的const指针。即使我们在类中的变量没有加this指针,系统也会默认给加上,唯一要注意的就是当this指针做返回值的一些应用。

赞(0)
未经允许不得转载:171主机测评 » string学习总结
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址