【C++】string详解
我们再使用再对字符串操作的时候,可以调用string中的函数实现一些功能,string的头文件是
#include<string>
string类是一个模板类,位于名字空间std中,所以还需要
using namespace std;
字符串构造函数
-
string str; // 构造空的string类对象str
-
string str(“abc”); //使用字符串”abc“构造对象
-
string str(10, ‘h’); // 10个a组成字符串构造对象
-
string str(s); //对s拷贝构造出str
-
string str(“abc”,strlen); //将”abc“的strlen个字节存入str中
-
string str(“abc”,sd,strlen); //从”abc“的sd位置开始,存储strlen个字节到str中
清空字符串assign()函数
- str.assign(“abc”); //清空字符串,并设置为 “abc”
- str.assign(“abc”,2); //清空字符串,将str设置为“ab”
- str.assign(“abc”,1,1); //清空字符串,将str设为”abc“从第一个位置开始截取的第一个字节a
- str.assign(5,‘h’); //清空字符串,将字符串设为5个’h‘
插入inster()函数
- str.insert(2,3,‘a’); //在str下标为2的位置添加 3个 字符’a’
- str.insert(2,“abc”); //在str下标为2的位置添加 字符串 “abc”
- str.insert(2,“abc”,1); //在str下标为2的位置添加 字符串 “abc” 中 第一个字符a
- str.insert(2,“ABC”,1,1); //在str下标为2的位置添加 字符串 “ABC” 中从第一个位置开始的 第一个字符
查找find()函数:从头部查找
- str.find(‘a’); //查找 ‘a’
- str.find(“abc”); //查找 “abc”
- int n=str.find(“abc”); //在str中查找”abc“,若查找到返回字符串第一个元素位置
- str.find(‘a’,1); //从第一个位置开始,查找’a’
- str.find(“abc”,1,2); //从从第一个位置开始,开始查找 “abc”的前 2个 字符
查找rfind()函数:从尾部查找
- str.rfind(‘a’); //查找 ‘a’
- str.rfind(“abc”); //查找 “abc”
- int n=s4.rfind(“abc”); //查找到”abc“,返回字符串第一个元素的位置
- str.rfind(‘abc’,1); //从末尾开始,向前查找’B’
- str.rfind(“abc”,1,2); //从末尾开始,开始向前查找 ‘ABC’ 的前 2个 字符
find_first_of()函数
查找是否包含有子串中任何一个字符
- str.find_first_of(“abBc”);//查找 “abBc” 和str 相等的任何字符,“abBc” 中有就返回位置
- str.find_first_of(“abBc”,1);//查找 “abBc” 和str 相等的任何字符,从 位置1 处,开始查找"abBc" 中的字符,“abBc” 中有的就返回位置
- str.find_first_of(“abBc”,1,2);//查找 “abBc” 和str 相等的任何字符,从 位置1 处,开始查找"abBc" 的前 2个 字符,“abBc” 中有的就返回位置
find_last_of()函数:
- find_first_not_of ()末尾查找, 从末尾处开始,向前查找是否包含有子串中任何一个字符
- str.find_last_of(“abBc”)——查找 “abBc” 和str 相等的任何字符,向前查找,“abBc” 中有的返回位置
- str.find_last_of(“abBc”,1)——查找 “abBc” 和str 相等的任何字符,从 位置1 处,开始向前查找"abBc" 中的字符,“abBc” 中有的就返回位置
- str.find_last_of(“abBc”,10,2)——查找 “abBc” 和str 相等的任何字符,从 位置10 处,开始向前查找"abBc" 的前 2个 字符,“abBc” 中有的就返回位置
比较compare()函数
完全相等返回0;完全不等返回;部分相等返回大于0
示例对象:string str(“abcd”)
- str.compare(“abcd”);//完全相等,返回0
- str.compare(“dcba”);//小于,返回一个小于0的值
- str.compare(“ab”);//大于,返回大于0的值
- str.compare(str);//相等
- str.compare(0,2,str,2,2);//用str的 下标0 开始的 2个字符 和 str的 下标2 开始的 2个 字符比较——就是用 “ab” 和 “cd”” 比较,结果小于零
- str.compare(1,2,”bcx”,2);//用str的 下标1 开始的 2个字符 和 "bcx"的 前 2个 字符比较——就是用 “bc” 和 “bc”” 比较,结果是零
拷贝函数
- str.substr(2);//提取子串,提取出 str 的 下标为2 到末尾
- str.substr(2,3);//提取子串,提取出 str 的 下标为2 开始,提取三个字节
- str.data();//将string类转为字符串数组
- str.copy(s,count,pos);//将 str 里的 pos 位置开始,拷贝 count个 字符,存到 s (数组)里
删除函数
- str.erase(2);//删除 下标2 的位置开始,之后的全删除
- str.erase(2,1);//删除 下标2 的位置开始,之后的 1个 删除
- str.clear();//删除 str 所有
- str.replace(2,4,“abcd”);//从 下标2 的位置,替换 4个字节 ,为"abcd"
字符串操作函数
-
str.size() ;//返回字符串有效字符长度
-
str.length() ;//返回字符串有效字符长度
-
str.capacity() ;//返回空间总大小
-
str.empty() ;//检测字符串释放为空串,是返回true,否则返回false
-
str.swap(str1);//交换 str1和 str 的字符串
-
str.resize( n, c );//将有效字符的个数该成n个,多出的空间用字符c填充,既扩容又改变了size值
-
str.resize ( n );//将有效字符的个数改成n个,多出的空间用0填充
-
str.reserve(n);//设置str的容量 n,不会填充数据
访问函数
-
str[] ( pos );//返回pos位置的字符
-
str.at(i);//返回字符,其是个函数
str.at(i) 实质上是一个函数
operator[]
与.at()
的区别在于:
at
: 出现错误会抛出异常。如果出现越界,会抛异常处理。[]
:出现错误命中断言。如果下标i
访问的不是在合理的size
范围中(比如越界),会报错。
追加字符函数
- str.push_back©;//在字符串后尾插字符c
- str.append (s);//在字符串后追加一个字符串
- str+=(str);//在字符串后追加字符(串)str
注:一般使用+=比较多,既可以加字符也可以加字符串
- str.substr(a,a-c);//从a位置开始截取a-c个单位长度字符串返回
反转相关函数
(位于头文件< algorethm >)
-
reverse(str.begin(),str.end());//str的开始 到 结束字符反转
-
reverse(s4.begin,s4.end); //将str整体从头到底反转
参考:https://blog.csdn.net/qq_42659468/article/details/90381985?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/qq_42351880/article/details/90635883?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task