C++的string

string类

string支持流插入和流提取

string初始化

赋值符的重载

遍历string

string的大小:

两个长度没有任何不同

第一种

(写两个函数重载是为了防止字符串为const)

使用引用返回就可以修改得到的变量的值

第二种:迭代器

迭代器iterator

迭代器是一个类似于指针的东西(不一定是指针)

begin返回第一个位置的指针,end返回最后一个字符的下一个位置的指针

遍历方式

迭代器相比于下标访问的优越性

不是所有东西都支持下标访问,但是都支持迭代器

迭代器是一个主流的通用的方法

第三种:范围for

所有结构都支持范围for,因为他的底层就是迭代器

auto后加&可以就可以遍历修改数据了

范围for遍历自动取数据,自动++,自动判断结束

但是,如果类型是const string,就不能用上述遍历修改了

begin存在两种返回数据

反向迭代器

反向迭代器存在rbegin和rend

他的目的是反向遍历

他的++和--是相反的,

++向后走,--向前走

算法:数据排序

参数:起始和结束位置,左闭右开(即传入最后一个的下一个位置)

插入和修改

1.

单个字符

2.

字符串

3.

assign的本质是一种变相的赋值

insert

insert是插入

insert应该慎用,因为效率不高(O(N))

erase

erase是删除

同样慎用,效率不高

如果结束位置较大或不传,则全部删完后停止

但是注意第一个参数pos不能越界

replace

replace的作用是替换

string的部分接口

string的扩容

起初是存在临时数组buf中,buf空间不够,数据会转移到堆中

在vs下的扩容

可以是1.5倍扩容,也可以是两倍扩容

在Linux下的扩容

对于字符串的存储,如果字符串大小小于16

会存储在临时生成的一个数组buf中

如果字符串大于16

就不会存储在buf中,转而存储在堆中

resize和reserve

resize影响size和capacity

reserve只影响capacity

reserve

reserve的作用是扩容

vs下

可以看到申请扩容100,但是实际上扩容了111

linux下

而linux下则是正常的100

同时reserve不仅可以用于扩容,还可以用于缩容

(小于15就会缩,大于等于16,不缩)

但是Linux会缩容

注意,reserve只是扩容(改变capacity),不改变size,导致不能直接用下标访问

resize

resize会改变size

eg.

如果改变后的size大于capacity,则扩容

改变size后会删除多余的字符串

缩容

由于空间不能分段释放,所以缩容的本质是开辟一块更小的空间,然后将数据拷贝

是时间换空间

at

访问pos位置的字符

string operations

c_str

获取指向字符串的指针(首元素的地址)

可以和c语言更好的兼容

find和rfind

find是正着找,rfind是反着找

获取子串

find_first_of

查找aeiou中的任意一个字符

时间复杂度是m*n

operator + 

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:在C++中,可以使用string类来表示字符串。可以通过索引或at()函数来访问string字符串的元素。例如,字符串str中的第三个字符可以使用str或str.at(2)来获取。 引用:如果需要将数值转换为字符串,在C++中可以使用stringstream类来实现。首先创建一个stringstream对象,然后使用<<操作符将数值插入对象中。最后可以使用>>操作符或str()函数将stringstream对象转换为字符串。下面是一个示例代码: ```c++ #include <string> #include <sstream> #include <iostream> using namespace std; int main() { double a = 123.32; string res; stringstream ss; ss << a; ss >> res; // 或者 res = ss.str(); cout << res; return 0; } ``` 这段代码将数值a转换为字符串,并将其输出。 对于string类型的字符串,可以使用比较操作符来比较字符串的大小。与C语言中的字符串比较函数不同,C++中的string类可以直接使用>、<、==、>=等数学符号进行比较。例如,可以使用==操作符来判断两个字符串是否相等,或者使用>操作符来比较两个字符串的大小。下面是一个示例代码: ```c++ #include <string> #include <iostream> using namespace std; int main() { string a; a = "hello"; if (a == "world") cout << "yes" << endl; else if (a > "world") { cout << "You win." << endl; } else cout << "You failed." << endl; a = " world"; cout << a << endl; } ``` 这段代码首先给字符串a赋值为"hello",然后使用==操作符判断a是否等于"world",如果不等于则继续使用>操作符判断a是否大于"world",如果大于则输出"You win.",否则输出"You failed."。最后将字符串a赋值为" world"并输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值