• 【C++】string常用函数总结及其模拟实现


    目录

    一、String的构造

    二、String的大小和容量

    三、String的字符串比较

    四、string的访问

    五、String的字符插入

    六、string拼接字符串

    七、string的删除

    八、string的查找

    九、string的分割

    模拟实现


    一、String的构造

    1. string():生成空字符串;
    2. string (const string& str):生成str字符串的一个拷贝;  
    3. string (const string& str, size_t pos, size_t len = npos):生成str字符串pos位置字符开始,npos个字符的拷贝(如果数量不足,则到结尾为止);
    4. string (const char* s):生成字符数组s的一个拷贝;
    5. string (const char* s, size_t n):生成字符数组s前n个元素的一个拷贝;
    6. string (size_t n, char c):生成有n个字符c的一个字符串;
    7. template  string  (InputIterator first, InputIterator last):利用迭代器生成字符串;

    二、String的大小和容量

    1. size():返回string对象的字符个数;
    2. capacity():重新分配内存之前,string对象能包含的最大字符数;
    3. reserve(size_t n = 0):修改string的容量为n,若n大于现有容量,则不进行改变;
    4. resize(size_t n, char c):修改string的字符个数,若n小于现有字符个数,对其进行截断,若n大于现有字符串个数,使用字符c进行填充;

    三、String的字符串比较

     C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。  
    在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)。

    四、string的访问

    1. 使用[ ]:string支持使用[ ]进行类似于数组的随机访问;
    2. 使用at(size_t pos):类似与[ ],区别为at函数会进行越界检查;
    3. 迭代器与反向迭代器

    五、String的字符插入

    1. push_back(char c):尾插;
    2. insert(iterator pos, char c):在pos位置前插入字符c;
    1. void test()
    2. {
    3. string s1;
    4. // 尾插一个字符
    5. s1.push_back('a');
    6. s1.push_back('b');
    7. s1.push_back('c');
    8. cout<<"s1:"<<s1<<endl; // s1:abc
    9. // 在pos前插入字符c
    10. s1.insert(s1.begin(),'1');
    11. cout<<"s1:"<<s1<<endl; // s1:1abc
    12. }

    六、string拼接字符串

    1. append()
    2. +=操作符
    1. void test()
    2. {
    3. // 方法一
    4. string s1("abc");
    5. s1.append("def");
    6. cout<<"s1:"<<s1<<endl; // s1:abcdef
    7. // 方法二
    8. string s2 = "abc";
    9. s2 += "def";
    10. cout<<"s2:"<<s2<<endl; // s2:abcdef
    11. }

    七、string的删除

    1. iterator erase(iterator p):删除字符串中p所指的字符
    2. iterator erase(iterator first, iterator last):删除字符串中迭代器区间[first,last)上所有字符
    3. string& erase(size_t pos = 0, size_t len = npos):删除字符串中从索引位置pos开始的len个字符
    4. void clear():/删除字符串中所有字符

    八、string的查找

    1. size_t find (constchar* s, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引,-1表示查找不到子串;
    2. size_t find (charc, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引,-1表示查找不到字符;
    3. size_t rfind (constchar* s, size_t pos = npos) const:在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,-1表示查找不到子串;
    4. size_t rfind (charc, size_t pos = npos) const:在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符;
    5. size_t find_first_of (const char* s, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符;
    6. size_t find_first_not_of (const char* s, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符;
    7. size_t find_last_of(const char* s, size_t pos = npos) const:在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符;
    8. size_t find_last_not_of (const char* s, size_t pos = npos) const:在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串;

    九、string的分割

    1. strtok()
    1. void test()
    2. {
    3. char str[] = "I am a student; hello world!";
    4. const char *split = ",; !";
    5. char *p2 = strtok(str,split);
    6. while( p2 != NULL )
    7. {
    8. cout<<p2<<endl;
    9. p2 = strtok(NULL,split);
    10. }
    11. }


    模拟实现

    参考下面的链接

    my_string class · 梁羽赫/cpp_basic - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://gitee.com/yuhe-liang/cpp_basic/tree/master/my_string%20class

  • 相关阅读:
    Docker-compose详解和LNMP搭建实战
    弱网测试探索
    HTML学生中秋节日网页设计模板 DIV布局大学生中秋节网页作业制作 八月十五中秋静态网页成品代码下载 中秋节日网页设计作品
    使用Java8 Stream流中的Collectors.collectingAndThen()方法去重
    源码安装并运行Haproxy
    loongarch下iso定制
    优秀的网络工程师,需要具备什么?
    MapReduce(二)
    vue页面跳转
    vue实现post请求接口流式输出数据sse
  • 原文地址:https://blog.csdn.net/lyhv_v/article/details/138008440