C++ string类的用法总结


String类:按照类的方式进行动态管理字符串
底层:是一种顺序表的结构,元素是char类型的字符

1.string类的常用构造函数:

在这里插入图片描述

//用法小实例
#include<iostream>
using namespace std;
 
int main() {
	string s1;   //空字符串
	string s2(10,'$');  //十个 $
	string s3("hello world");  //hello word
 
	cout << s3.size << endl;
	cout << s3.length << endl; //都是求字符串长度  11
	cout << s3.capacity << endl; //求s3的容量
 
	s3.clear();  //清空
	string s4(s3); //s4 和 s3一样
}

注:使用string类时,必须包含头文件以及using namespace std。

2.string对象上的操作

在这里插入图片描述

2.1 使用IO操作符读写string对象。

int main()
{
	string s;    //空字符串
	cin >> s;    //将 string 对象读入s,遇到空白停止
	return 0;
}

使用IO操作符读取时,string 对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。

2.2 使用getline读取string对象

getline函数的参数是一个输入流和一个string 对象。函数从给定的输入流中读入内容,直到遇到换行符为止(换行符也被读进来了),然后把所读的内容存入到那个string对象中(注意不存换行符)。

3.string常用成员函数:

【assign函数】:

str.assign(“ABC”)——清空字符串,并设置为 “ABC”
str.assign(“ABC”,2)——清空字符串,并设置为"AB",保留两个字符
str.assign(“ABC”,1,1)——清空字符串,设置为 “ABC” 中的从 位置1 开始,保留 1个 字符
str.assign(5,‘A’)——清空字符串,然后字符串设置为 5个 ‘A’
str.length()——求字符串长度
str.size()——和 length() 一样
str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
str.reasize(10)——设置当前 str 的大小为10,若大小大与当前串的长度,\0 来填充
str.reasize(10,char c)——设置当前 str 的大小为10,若大小大与当前串的长度,字0符c 来填充
str.reserve(10)——设置str的容量 10,不会填充数据
str.swap(str1)——交换 str1 和 str 的字符串
str.push_back(‘A’)——在str末尾添加一个字符 ‘A’ ,参数必须是字符形式
str.append(“ABC”)——在str末尾添加一个字符串 “ABC”,参数必须是字符串形式

【insert函数】:

str.insert(2,3,‘A’)——在str下标为2的位置添加 3个 字符’A’
str.insert(2,“ABC”)——在str下标为2的位置添加 字符串 “ABC”
str.insert(2,“ABC”,1)——在str下标为2的位置添加 字符串 “ABC” 中 1个 字符
str.insert(2,“ABC”,1,1)——在str下标为2的位置添加 字符串 “ABC” 中从位置 1 开始的 1 个字符
注:上个函数参数中加粗的 1 ,可以是 string::npos,这时候最大值,从 位置1 开始后面的全部字符

str.insert( iterator pos, size_type count, CharT ch )——在 str 中,迭代器指向的 pos位置 插入count个字符 ch
s4.insert(++str1.begin(),2,‘a’); 结果:s4:ABCD -> AaaBCD
str.insert( iterator pos, InputIt first, InputIt last )——在 str 中,pos位置 插入 str1 的 开始位置 到 结束为止
s4.insert(s4.begin(),str1.begin(),str1.end()); 结果:s4:ABCD str1:abc -> abcABCD
str.erase(2)——删除 下标2 的位置开始,之后的全删除
str.erase(2,1)——删除 下标2 的位置开始,之后的 1个 删除
str.clear()——删除 str 所有
str.replace(2,4,“abcd”)——从 下标2 的位置,替换 4个字节 ,为"abcd"
str.empty()——判空

【反转相关】:

(位于头文件)
reverse(str.begin(),str.end())——str的开始 到 结束字符反转
reverse(s4.begin,s4.end); 结果:s4:ABCD -> DCBA

【查找相关】:

查找成功返回位置 ,查找失败,返回-1
find函数:从头查找
str.find(‘A’)——查找 ‘A’
str.find(“ABC”)——查找 “ABC”
int n=s4.find(“ABC”); s4:ABCD -> n = 0

str.find(‘B’,1)——从 位置1 处,查找’B’
str.find(“ABC”,1,2)——从 位置1 处,开始查找 ‘ABC’ 的前 2个 字符
rfind函数:从尾部查找

str.rfind(‘A’)——查找 ‘A’
str.rfind(“ABC”)——查找 “ABC”
int n=s4.rfind(“ABC”); s4:AAAABCD -> n = 3

str.rfind(‘B’,1)——从 位置1 处,向前查找’B’
str.rfind(“ABC”,1,2)——从 位置1 处,开始向前查找 ‘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” 中有的就返回位置

【拷贝相关的】:

str1=str.substr(2)——提取子串,提取出 str 的 下标为2 到末尾,给 str1
str1=str.substr(2,3)——提取子串,提取出 str 的 下标为2 开始,提取三个字节,给 str1
const char* s1=str.data()——将string类转为字符串数组,返回给s1
char* s=new char[10]

str.copy(s,count,pos)——将 str 里的 pos 位置开始,拷贝 count个 字符,存到 s 里
比较相关的函数:

compare函数:完全相等返回0;完全不等返回小于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”” 比较,结果是零

参考原文链接:https://blog.csdn.net/qq_42659468/article/details/90381985

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值