• 【C++】string类的常用接口


    目录

    一、string 类的总结

    二、 string 类的常用接口说明

    1.string 类对象的常见构造

    2.string 类对象的容量操作

    3.复制运算符重载

    4.成员访问操作符

    5.迭代器

    6. 三种尾插方式

    6.1 push_bank

    6.2 append

    6.3 +=运算符重载

    7.insert 与 erase

    8. c_str

    9. find/rfind 与 substr

    10. getline的输入

    11.字符串的各种转化

    一、string 类的总结

    大家可以去 cplusplus.com 中详细了解一下string类的文档介绍。

    总结:

    1. string 是表示字符串的字符串类
    2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作 string 的常规操作。
    3. string 在底层实际是: basic_string 模板类的别名
    4. 不能操作多字节或变长字符的序列.

    二、 string 类的常用接口说明

    1.string 类对象的常见构造

    (constructot) 函数名称功能说明
    string ()   (重点)构造空的string类对象,即空字符串
    string(const string& s)   (重点)拷贝构造函数
    string(const char* s)   (重点)用C-string 来构造string类对象
    string (const string& str,size_t pos,size_t len =npos)从pos位置开始拷贝到npos位置
    string(size_t n,char c)string类对象中包含n个字符c

    接下来我们使用以上5中常见的构造方式来创建5个对象。 


    特别注意,关于第四个构造方式中的缺省值npos,它的值为 -1,又因为 npos 为 size_t 无符号整形,所以其是一个很大的数(全1),所以如果我们不给截至位置,可以理解为拷贝到字符串结束。

    当然,string 类也是可以支持隐式类型的转换的。

    这种方式的本质是隐式类型的转化,在前面讲解explicit 关键字例子时对这有过讲解,本质是相同的。


    2.string 类对象的容量操作

    函数名称功能说明
    size (重点)                        返回字符串有效字符长度
    length  返回字符串有效字符的长度
    capacity返回空间总大小
    empty  (重点)检测字符串释放是否为空串
    clear   (重点)清空有效字符
    reserve   (重点)为字符串预留空间
    resize   (重点)将有效字符的个数改为n个,多出的空间用字符c填充

    注意:

    1. size() 和 length() 方法底层实现原理完全相同,引入 size 的原因是为了与其他容器的接口保持一直,一般情况基本都使用size()
    2. clear() 只是将string种有效字符清空,不改变底层空间大小
    3. resize(size_t n) 与 resize (size_t n,char c)都是将字符串有效字符个数改变到 n 个,不同的是当字符个数增多时:resize (n)用 0 来填充多出的元素空间,resize (size_t n,char c)用字符 c 来填充多出的元素空间。注意:resize 在改变元素个数时,如果是将元素个数增多,可能会改变容量的大小,如果是将元素个数减少,底层空间总大小不变。
    4. reserve (size_t n=0) : 为 string 预留空间,不改变有效元素个数,当 reserve 的参数小于 string 的底层空间总大小时,reserver 不会改变容量大小。

    3.复制运算符重载


    4.成员访问操作符

    一个场景:遍历一遍字符串,并将其中一个字符+1

    5.迭代器

    目前在string中,它的使用类似于指针(不一定是指针)。

    迭代器的使用

     使用方式:  

    6. 三种尾插方式

    这里举例三种常用的 string 插入方式,这里附上文档和使用举例,比较简单,就不多讲解了。

    6.1 push_bank

    使用举例:


    6.2 append

    6.3 +=运算符重载

     使用方法:

    7.insert 与 erase

    以上的这些方式都是从字符串的末尾开始插入数据的,接下来我们学习在string任意位置删除字符的函数。

     使用举例:

    8. c_str

    使用C语言的方式 打印出文件中的内容

    c_str : 返回一个指向数组的指针,该数组包含以 null 结尾的字符序列(即 C 字符串),表示字符串对象的当前值。

    1. void test10()
    2. {
    3. string filename("test.cpp");
    4. FILE* fout = fopen(filename.c_str(), "r");
    5. assert(fout);
    6. char ch = fgetc(fout);
    7. while (ch != EOF)
    8. {
    9. cout << ch;
    10. ch = fgetc(fout);
    11. }
    12. }

    两者之间的差别

    如果我们想使用C语言中的文件操作方式,就可以将string 类中存储的字符串转化为C语言形式的字符串,从而进行操作,具体代码如下:

    1. void test_string()
    2. {
    3. string filename("test.cpp");
    4. FILE* fout = fopen(filename.c_str(), "r");
    5. assert(fout);
    6. char ch = fgetc(fout);
    7. while (ch != EOF)
    8. {
    9. cout << ch;
    10. ch = fgetc(fout);
    11. }
    12. }

    9. find/rfind 与 substr

     使用场景:切割网页链接。

    1. void DealUrl(const string& url)
    2. {
    3. size_t pos1 = url.find("://");
    4. if (pos1 == string::npos)
    5. {
    6. cout << "非法url" << endl;
    7. return;
    8. }
    9. string protocol = url.substr(0, pos1);
    10. cout << protocol << endl;
    11. size_t pos2 = url.find('/', pos1 + 3);
    12. if (pos2 == string::npos)
    13. {
    14. cout << "非法url" << endl;
    15. return;
    16. }
    17. string domain = url.substr(pos1 + 3, pos2 - pos1 - 3);
    18. cout << domain << endl;
    19. string uri = url.substr(pos2 + 1);
    20. cout << uri << endl << endl;
    21. }
    22. void test_string11()
    23. {
    24. string filename("test.cpp.tar.zip");
    25. // 后缀
    26. //size_t pos = filename.find('.');
    27. size_t pos = filename.rfind('.');
    28. if (pos != string::npos)
    29. {
    30. //string suff = filename.substr(pos, filename.size() - pos);
    31. string suff = filename.substr(pos);
    32. cout << suff << endl;
    33. }
    34. string url1 = "https://cplusplus.com/reference/string/string/";
    35. string url2 = "https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=dme=0%26n%3D0";
    36. string url3 = "ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf";
    37. DealUrl(url1);
    38. DealUrl(url2);
    39. DealUrl(url3);
    40. }

    find_first_of 的功能是搜索其参数中指定的任何字符匹配的位置,了解即可。

    10. getline的输入

    因为使用 cin 时,遇到空格则会停止输入,如果我们在以后的使用中,想把空格也输入到其中,则可以使用 getline 函数,使用 getline 只会在遇到 \n 时停止输入。

    11.字符串的各种转化

    这些函数就不过多介绍了,原理很简单,就是从字符串转换到各种形式. 

  • 相关阅读:
    Linux 打开的文件过多 too many open files
    急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00
    flask使用Flask-Mail实现邮件发送
    什么是人工通用智能(AGI)
    如何入行软件开发——常见问题及岗位分工
    抖音矩阵系统,这个排名很难啊。按?
    ping命令
    [android毕业设计源码]精品基于Uniapp实现的美食APP[安卓毕业设计]
    【mysql进阶】MTS主从同步原理及实操指南
    Bootstrap的卡片组件相关知识
  • 原文地址:https://blog.csdn.net/Brant_zero/article/details/126679620