C++ STL 容器 string
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相关推荐
- c++之STl容器-string
目录 容器的分类 string string的概念 string的初始化 string的遍历 string的一些基本操作 char*类型和string类型互转 字符串的连接 字符串的查找和替换 str ...
- VScode调试C++代码时无法查看STL容器(string、vector等)
如下图所示:用VScode调试C++代码时,无法显示我们想要的值. 解决方法:编辑launch.json,加入如下设置: "setupCommands": [{"desc ...
- C++STL的string容器
C++STL的string容器 string容器 string基本概念 string构造函数 string赋值操作 string字符串拼接 string查找和替换 string字符串比较 string ...
- c++STL容器的string
STL容器的string String概念 string是一个类, char*是一个指向字符的指针. string不用考虑内存释放和越界. string提供了一系列的字符串操作函数 string的构造 ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- STL 的string类怎么啦?
STL 的string类怎么啦? 陈皓 前言 上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度 ...
- gdb 查看 stl容器 zz
将下面文件作为 ~/.gdbinit的内容, 或者在已有的~/.gdbinit中source下面的文件, 然后可以以下列方式查看stl容器的数据: 容器类型 GDB 命令 std::vector&l ...
- 标准非STL容器 : bitset
1. 概念 什么是"标准非STL容器"?标准非STL容器是指"可以认为它们是容器,但是他们并不满足STL容器的所有要求".前文提到的容器适配器stack.que ...
- C++STL容器大全
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105044302 S ...
最新文章
- 20190318-使用类做一个简单的图书馆管理系统
- hdu-2612-Find a way(广搜,bfs)
- 使用Apache Camel 2.14的轻松REST端点
- Android之NetworkOnMainThreadException异常
- 提高篇 第五部分 动态规划 第6章 斜率优化动态规划
- EasyDarwin源码分析(二)——rtsp-server、rtsp-session
- FRM-10102错误解决
- 回声状态网络(ESN)对MNIST手写数字集识别
- Symmetric 配置数据库同步
- 「数据结构」普林斯顿算法课第二周作业
- starUML4.0导出的图片去除水印的方法
- Android Q 上的Biometric生物识别之Face人脸识别流程
- 刷新校史!985副研究员,以独立作者身份,研究成果被数学顶级期刊录用!
- python之meshgrid的使用
- Appendix B Review of Memory Hierarchy
- vue3获取当前页面组件的路由参数信息
- 为发烧而生:个人电脑诞生记
- java中处理科学计数法问题
- 关于论青少年尽早学少儿编程之说
- Android 13 VTS HIDL interface 解析
热门文章
- C++局部变量和全局变量的初始化
- tf.nn.embedding_lookup
- 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
- Django搭建简易博客
- java虚拟机内存模型种类_深入理解volatile类型——从Java虚拟机内存模型角度
- 开发java流程步骤,优秀Java开发人员的10个步骤
- mac php errorlog,Mac下使用php的error_log()函数发送邮件
- 一文读懂Git工作流
- android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...
- oracle中主键自增长,oracle 数据库主键自动增长方法