• String(三)———接口大全


    目录

    一、string构造函数接口(Construct string object)

    二、析构函数接口​编辑

    三、赋值重载函数接口

    四、迭代器接口

    五、string下的size和length接口

     六、max_size接口

    七、clear接口

    八、capacity 和 empty接口

    九、reserve接口

    十、resize接口

    十一、shrink_to_fit 接口

    十二、 string元素访问接口

    十三、operator += 接口

    十四、append 接口

    十五、push_back、pop_back 接口

    十六、insert、erase 接口

    十七、assign、replace接口

    十八、c_str 接口

    十九、copy接口

    二十、find、rfind接口

    二十一、find_first_of 接口

    二十二、compare 接口

    二十三、substr 接口

    二十四、getline接口


    一、string构造函数接口(Construct string object)

    这个接口我在string(二)中详细说明了,在此不再赘述。

    详情可见博客————

    https://blog.csdn.net/SAKURAjinx/article/details/127585347

    二、析构函数接口

     与构造函数相对,~string()是析构函数,在对象脱离其作用域(例如它所在函数调用结束)时系统自动调用,清理释放对象开辟的空间。

    三、赋值重载函数接口

     它有三种用法,单个字符赋值、字符串赋值、string对象赋值。

    1. string s1 = "a";
    2. string s2 = "hello";
    3. string s3 = s1 + s2;

    四、迭代器接口

     begin、end为正向迭代器,rbegin、rend为反向迭代器;cbegin、cend为const正向迭代器,crbegin、crend为const反向迭代器。

    在string(二)中详细介绍了,在此不多赘述。

    https://blog.csdn.net/SAKURAjinx/article/details/127585347

    五、string下的size和length接口

    string是字符串,length表示长度,size表示大小,应该都能显示字符串当前长度,那为什么会存在两个意义相同的接口呢?

     六、max_size接口

       这个接口目前来看没有什么意义,也基本不会用到,是设计问题。

    七、clear接口

    八、capacity 和 empty接口

    1、 capacity是容量,不是指string的长度,而是指string目前所能容纳的字符数。它是const修饰的,无法通过该接口直接修改容量大小,除非用reserve接口改变。

    这里的capacity在不同平台下也有不同,像g++编译器下capacity计算的是string的所有字符数(包括 \0 );而像VS 2013下计算的是string的有效字符数(不包括 \0),这种差别也体现在扩容等接口上(Push_back)。

    2、empty接口是用来判断string是否长度为0,可用作循环结束条件。

    九、reserve接口

    reserve是保留的意思,它可以为capacity预留足够的空间。

     

     原本capacity的大小是15,reserve(30)后变为31,VS 2013平台下大致是按(n*16-1)的方式扩容的。

    十、resize接口

     resize可以改变size的大小,它的用处比较广,主要是分三种情况:

    1、resize参数比size小

    此时会截去多余部分,只改变size,不改变capacity。

     2、resize参数介于size和capacity之间

    此时会填补size到capacity之间的位置(用空字符 \0)

    3、resize参数比capacity大

    此时会扩容,而后填补size与capacity之间的位置,同样是用 \0

    十一、shrink_to_fit 接口

     缩减string的容量capacity,使得它能符合size 的大小,不一定是要和size一样大,可以比size略大,只要在合理范围内。

    十二、 string元素访问接口

    一、运算符重载operator [ ]

    对[ ] 进行重载,使用下标进行元素访问。

    二、at 接口

    std :: string :: at可用于从字符串中提取字符。

    它会自动进行检查,如果越界将会抛异常。

    三、front、back

    分别替换头尾的字符。用得不多,毕竟有size存在。

    十三、operator += 接口

     

    十四、append 接口

     append是在string后面添加字符串,有6种方式:

    1、直接添加其他string对象

    2、添加string对象的部分,从第subpos位开始,尾插sublen个字符

    3、直接添加字符串

    4、添加一个字符串的前n个字符

    5、添加n个C字符

    6、添加一个string对象的部分,从first 到 last

    十五、push_back、pop_back 接口

     push_back在string后面增加一个字符。

     pop_back截去string末尾的一个字符。

    十六、insert、erase 接口

     

     insert 与 erase 是在字符串任意位置插入、删除数据,用得不多,如果不是在头尾插入删除数据会涉及移动数据降低效率,所以一般是用头插尾删。

    十七、assign、replace接口

     assign是用一个新的字符串赋值给原先的(覆盖原先的),使用方法与 operator+=、insert大同小异,只不过不是拼接字符串,而是覆盖。

     replace也是替换,只不过是指定位置pos覆盖,assign 与 replace不同,assign是覆盖全部(赋值)不管原先和现在字符串的长度,replace是覆盖部分。

    十八、c_str 接口

     c_str可以将string类型转化成C语言的字符串数组类型,返回的是一个临时指针(不能操作该指针),指针指向字符串的第一个字符。

    十九、copy接口

     返回指定部分字符串的长度,从pos位置开始,长度为len,并会将这段字符串指针拷贝给s。

    二十、find、rfind接口

    一、 find接口的 1、2、4用法差不多,都是从指定位置找相应的字符 / 字符串。

     第一个是从string  s0中找string s1,没有给出参数pos,默认为0,也就是从头开始找;返回找到的string类型字符串首元素下标 (类型size_t)

    第二个是从string  s0中找字符串" 789",给出参数pos = 1,从下标为1处开始找;返回找到的字符串首元素下标 (类型size_t)

    第三个是从string  s0中找字符 ' 0 ' ,给出参数pos = 5,从下标为5处开始找。返回找到的字符下标 (类型size_t)

     

     二、

    if (found!=std::string::npos)

    这里find返回值返回的是size_t,而不是int,C语言通常下标返回都是int,如果找不到对应元素就返回负值(如-1),但是这里设计的找不到返回的是std::npos,不同平台下实现的具体值不一样。

    测试:在VS 2019下为size_t 最大值:

    三、find的第3个用法是从pos位置开始找字符串s的前n位,返回最先找到的下标。

     

    四、rfind与find相对,是从后往前找

     

     

    二十一、find_first_of 接口

    该接口是去寻找与给出的字符串或string对象中匹配的字符,是最先出现匹配字符的分割字符串中第一个出现的匹配字符。

     如果是循环进行的话,可以依次找出字符串中所有的匹配字符。

     find_first_of / find_last_of 这些接口不怎么常用,需要的时候查阅即可。

    二十二、compare 接口

     比较string对象 / 字符串,返回值为int, ==0 则相等。

    1. std::string str1("green apple");
    2. std::string str2("red apple");
    3. //字符串str1与str2对比
    4. if (str1.compare(str2) != 0)
    5. std::cout << str1 << " is not " << str2 << '\n';
    6. //str1从下标6开始5个字符,与"apple"对比
    7. if (str1.compare(6, 5, "apple") == 0)
    8. std::cout << "still, " << str1 << " is an apple\n";
    9. //str2.size()-5下标处开始5个字符,与"apple"对比
    10. if (str2.compare(str2.size() - 5, 5, "apple") == 0)
    11. std::cout << "and " << str2 << " is also an apple\n";
    12. //str1下标6处开始5个字符,与str2下标4开始5个字符对比
    13. if (str1.compare(6, 5, str2, 4, 5) == 0)
    14. std::cout << "therefore, both are apples\n";

    二十三、substr 接口

     从指定位置开始拷贝,拷贝长度为len,如果len > 字符串剩余长度,则拷贝到结尾停止,返回string类型对象。

    二十四、getline接口

     getline也属于流提取的一种,它可以输入带有空格的字符串以及带有空格的字符数组。

    看一道OJ题了解一下:

    1. #include
    2. using namespace std;
    3. int main() {
    4. string s;
    5. getline(cin,s);
    6. int pos = s.rfind(' ');
    7. cout<size()-pos-1<
    8. }

  • 相关阅读:
    SpringMVC拦截器
    Java程序设计——集元数据(JDBC编程)
    如何看待Unity新收费模式?
    MQTT云台如何助力分布式农村污水处理的远程管理
    html动态爱心超文本标记代码,丝滑流畅有特效,附源码
    docker基础篇——万字解读小鲸鱼
    使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示
    笔记,人工智能,梯度下降法
    学生个人网页设计作品:基于HTML+CSS+JavaScript实现摄影艺术网站 DIV布局简单的摄影主题网站
    DataFrame与DataSet的互操作_大数据培训
  • 原文地址:https://blog.csdn.net/SAKURAjinx/article/details/127597068