C++ string类型学习笔记

C++ string类型学习笔记

@(C/C++学习笔记)

 实话说string类型着实是一种讨厌的数据结构,说它讨厌并不是它到底有多么复杂,而是用的实在太少,等到突然要用的时候又不知道该怎么初始化,有哪些接口,有哪些坑要注意。今天(20.9.12)在一道leetcode题中遇到该类型,所以抓住机会,尽可能熟悉一下,就这两天吧。

初始化string类型

 string是个类类型啊,就像所有的类类型一样,俩初始化方式:直接初始化拷贝构造函数初始化

//直接初始化
string s1("tempstring");
string s2(10,'a');//这里只能是字符,不能是字符串
string s3("abc");
//拷贝初始化
string s4 = s3;
string s5 = "tempstring";

string类型基本操作

数据访问

 string类型的数据访问和vector类型一样,使用[]操作符进行。类似的,也可以使用size()empty()获得元素数量(不包含末尾的\0)和判断是否为空串(true)。

运算符重载

 总体而言,重载后的功能接近对内置类型的操作。

  • +:拼接,注意:拼接的是string类型,不是字符串类型。但是可以通过隐式类型转换将字符串类型转换成string类型:要保证+两边至少有一个string类型。
  • =:赋值
  • ==,<,>,<=,>=:长度相等,字符一样,则相等;长度不一样,但字符对应一样,则根据长度比较;否则,以第一对不相等的字符作为比较依据。

输入

 cin以空白字符作为输入间隔;getline(is,string type)以换行作为输入间隔。

对每一个字符的操作

 cctype库中存在大量对单个字符的操作:检查是否是字母、数字、标点、可打印字符、控制字符、空白、大写字母、小写字母,或者是将大写替换为小写、将小写替换为大写。
 另外在C++11出现了一种基于范围的for语句:

for(declaration:expression)
	statement

其中,expression为一个序列对象,比如string。然后declaration指代序列对象中的一个元素,可以是引用,然后循环进行操作。

string进阶操作

构造&初始化

string s(cp,n);
// s是cp所指向数组的前n个元素的拷贝,数组得是char,不要想什么int了,后者简直是流氓行为。
string s2(s,pos2,n);
//s2是s从下标pos2开始n个字符的拷贝
string s3 = s2.substr(pos3,n);
//s3是s2从下标pos3位置开始的n个字符的拷贝

 在上式中n,均可省略,可大可小,如果超过了数组或者string s的长度,就只能拷贝到数组或者string s尾部。那么问题来了,string s\0作为结尾,数组的结尾是什么呢?所以说数组的结尾也得是\0才能搞一个很大的n或者省略n

改变string的种种操作

 这里要不要说的详细一点呢?太详细了好像也记不住啊。

  • 首先是插入操作
     关于insert,它不仅仅可接受迭代器作为参数,还可以接受数组下标,但大同小异:先声明插入位置(end()还是size());然后声明插入内容(string);最后还可以声明插入长度。
//比如迭代器
string s1 = "wendell is me";
string s2 = "how are you";//怎么是你?
s2.insert(s2.begin()+x,s1.begin(),s1.end());
//再比如下标
string s3 = "how old are you"//怎么老是你?
s3.insert(15,2,'?');
s3.insert(15,s1,3);
  • 然后是删除(erase()
     俩参数:头,长度。
  • 接着是追加(append())
     这就一push_back()没什么好说的
  • 最后是替换(````replace()) &nbsp;仨参数:头、长度、换成啥。或者说:s2.replace(beg,len,s1) =s2.erase(beg,len)+s2.insert(beg,s1)```
    这样是不是清晰了呢,我可真是个小机灵鬼

查找

 string有六种查找方式。符合条件返回位置,否则返回string::npos。(语言开发者真的好闲啊

  • s.find(args),从s中查找字符串或者字符args第一次出现的位置
  • s.rfind(args),查找最后一次出现的位置
  • s.find_first_of(string s1),查s1中的字符在s中的第一次出现位置
  • s.find_last_of(string s1),最后一次
  • s.find_first_not_of(string s1),查s中第一个不在s1中的字符的位置
  • s.find_last_not_of(string s1),最后一个
     另外上述六种方法均可指定查找范围。

比较(compare()

 从哪里开始,长度是多少,和谁比较,它从哪儿开始,它的长度是多少。除了比较对象剩下的都可以删除。返回值根据比较结果来。

数值转换

  • 数值到string
    string s = to_string(val)
  • string s到数值:stoi,stof,stod,stol…参数为ss起始位置,长度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值