1 string

string内部含有一个char*字符串

2 string构造方式

  • 无参构造
string str;
  • 字符串构造
string str("abcd");
  • 拷贝构造
  • n个相同字符
string str(10, 'k');  //初始化为10个k

3 string赋值操作

可以有以下操作:

void string_test() {string str1;str1 = "str1";cout << "str1 = " << str1 << endl;string str2 = str1;cout << "str2 = " << str2 << endl;string str3 = "a";cout << "str3 = " << str3 << endl;string str4;str4.assign("str4");cout << "str4 = " << str4 << endl;string str5;str5.assign("123456789", 5);cout << "str5 = " << str5 << endl;string str6;str6.assign(str5);cout << "str6 = " << str6 << endl;string str7;str7.assign(10, 'k');cout << "str7 = " << str7 << endl;
}

结果为:

4 string拼接

可以使用的是  += 以及append, 例子如下:

void string_test1() {string str1 = "str1";str1 += "str";cout << "str1 = " << str1 << endl;str1 = "str1";str1 += 's';cout << "str1 = " << str1 << endl;str1 = "str1";string str2 = "str2";str1 += str2;cout << "str1 = " << str1 << endl;str1 = "str1";str1.append("str");cout << "str1 = " << str1 << endl;str1 = "str1";str1.append(str2);cout << "str1 = " << str1 << endl;str1 = "str1";str1.append("abcdefg", 4);            //拼前四个字符cout << "str1 = " << str1 << endl;str1 = "str1";str1.append("0123456789", 2, 3);      //从第二(从0开始数)个字符开始拼三个字符cout << "str1 = " << str1 << endl;str1 = "str1";
}

5 查找和替换

find测试:

void string_find_test() {string str1 = "abcdefg";int position = str1.find("de", 2);            //find有两个参数, 第一个是要查找的字符cout << "position: " << position << endl;     //或者子串, 第二个参数是开始查找的位置,position = str1.find("df", 2);                //第二个参数的默认值为0,返回值是找到的cout << "position: " << position << endl;     //第一个子串起始位置的下标,如果未找到就position = str1.rfind("de", 2);               //返回-1, rfind跟find的区别是:rfindcout << "position: " << position << endl;     //是从右向左查找.
}

替换测试:

void string_replace_test() {string str1 = "abcdefg";str1.replace(1, 3, "1111");        //从下标1起, 3个字符替换为"1111"cout << "str1: " << str1 << endl;
}

6 字符串对比

如下测试代码:

void string_compare_test() {string str1 = "abcdefg";string str2 = "abcdefg";if (str1.compare(str2) == 0) {cout << "str1 = str2" << endl;} else if (str1.compare(str2) > 0) {cout << "str1 > str2" << endl;} else if (str1.compare(str2) < 0) {cout << "str1 < str2" << endl;}
}

此时compare是比较字符串的每一位, 如果每一位都想等, 那么就相等, 如果前面的字符的ASCII码值大于后面的, 那么就返回 >0, 否则小于0. 此时因为str1和str2都是"abcdefg", 所以返回的是0:

当string str1 = "abadefg", string str2 = "abcdefg"时, 结果为:

当string str1 = "abcdefg", string str2 = "abcaefg"时, 结果为:

7 对字符插入删除操作

如下代码:

void string_insert_delete_test() {string str1 = "abcdefg";str1.insert(1, "000");cout << str1 << endl;str1.erase(1, 3);cout << str1 << endl;
}

结果:

8 取子串

void string_substring_test() {string str1 = "abcdefg";string str2 = str1.substr(1, 3);cout << str2 << endl;
}

结果:

扩展用途如下:

void string_find_test() {string str1 = "xiaoming@163.com";int position = str1.find('@');string username = str1.substr(0, position);cout << "username: " << username << endl;
}

结果为:

9 字符串分割 strtok_r

函数原型:

char *strtok_r(char *str, const char *delim, char **saveptr);

其中:

  • char *str                              被分割字符串(如果传入NULL, 则直接分割最后一个参数, 也就是saveptr)
  • const char *delim                分隔符,也是个字符串指针
  • char **saveptr                     一个供内部使用的指针,用于保存上次分割剩下的字串

C++ STL 容器 string相关推荐

  1. c++之STl容器-string

    目录 容器的分类 string string的概念 string的初始化 string的遍历 string的一些基本操作 char*类型和string类型互转 字符串的连接 字符串的查找和替换 str ...

  2. VScode调试C++代码时无法查看STL容器(string、vector等)

    如下图所示:用VScode调试C++代码时,无法显示我们想要的值. 解决方法:编辑launch.json,加入如下设置: "setupCommands": [{"desc ...

  3. C++STL的string容器

    C++STL的string容器 string容器 string基本概念 string构造函数 string赋值操作 string字符串拼接 string查找和替换 string字符串比较 string ...

  4. c++STL容器的string

    STL容器的string String概念 string是一个类, char*是一个指向字符的指针. string不用考虑内存释放和越界. string提供了一系列的字符串操作函数 string的构造 ...

  5. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  6. STL 的string类怎么啦?

    STL 的string类怎么啦? 陈皓 前言 上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度 ...

  7. gdb 查看 stl容器 zz

    将下面文件作为 ~/.gdbinit的内容, 或者在已有的~/.gdbinit中source下面的文件, 然后可以以下列方式查看stl容器的数据:  容器类型 GDB 命令 std::vector&l ...

  8. 标准非STL容器 : bitset

    1. 概念 什么是"标准非STL容器"?标准非STL容器是指"可以认为它们是容器,但是他们并不满足STL容器的所有要求".前文提到的容器适配器stack.que ...

  9. C++STL容器大全

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105044302 S ...

最新文章

  1. 20190318-使用类做一个简单的图书馆管理系统
  2. hdu-2612-Find a way(广搜,bfs)
  3. 使用Apache Camel 2.14的轻松REST端点
  4. Android之NetworkOnMainThreadException异常
  5. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划
  6. EasyDarwin源码分析(二)——rtsp-server、rtsp-session
  7. FRM-10102错误解决
  8. 回声状态网络(ESN)对MNIST手写数字集识别
  9. Symmetric 配置数据库同步
  10. 「数据结构」普林斯顿算法课第二周作业
  11. starUML4.0导出的图片去除水印的方法
  12. Android Q 上的Biometric生物识别之Face人脸识别流程
  13. 刷新校史!985副研究员,以独立作者身份,研究成果被数学顶级期刊录用!
  14. python之meshgrid的使用
  15. Appendix B Review of Memory Hierarchy
  16. vue3获取当前页面组件的路由参数信息
  17. 为发烧而生:个人电脑诞生记
  18. java中处理科学计数法问题
  19. 关于论青少年尽早学少儿编程之说
  20. Android 13 VTS HIDL interface 解析

热门文章

  1. C++局部变量和全局变量的初始化
  2. tf.nn.embedding_lookup
  3. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
  4. Django搭建简易博客
  5. java虚拟机内存模型种类_深入理解volatile类型——从Java虚拟机内存模型角度
  6. 开发java流程步骤,优秀Java开发人员的10个步骤
  7. mac php errorlog,Mac下使用php的error_log()函数发送邮件
  8. 一文读懂Git工作流
  9. android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...
  10. oracle中主键自增长,oracle 数据库主键自动增长方法