指针、数组、字符串

目录

.c_str、.data()

字符串替换

清除


string的底层就是用char类型的数组实现的,C++11标准后,string的末尾也以'\0'结尾

那string是否就是数组呢,我们把它的地址打印出来看一下

结论:string不是单纯的数组和指针

string strA{ "012345" };
std::cout << (int)&strA << " " << (int)&strA[0] << " " << (int)&strA[1];
	

输出结果

19921356 19921360 19921361   这里为什么要转换成int呢?因为只有这样,它才会打印出地址,否则打印的是strA里面的字符

可以看到string的内存模拟如下

未知未知未知未知string[0]string[1]

前四个字节不知道放了什么数据,后面两个依次放入了string的第一个字符和第二个字符

当我们往strA里添加数据时,它的地址又变了

string strA{ "012345" };
std::cout << (int)&strA << " " << (int)&strA[0] 
<< " " << (int)&strA[1]<<std::endl;
strA += "1231241242342134213412341234124312341234";
std::cout << (int)&strA << " " << (int)&strA[0] 
<< " " << (int)&strA[1];

13631008 13631012 13631013
13631008 15534800 15534801   说明加了东西后,它又重新分配内存了 

那如果我们要使用string的内存,怎么使用呢

.c_str、.data()

c_str、data()都会返回一个const char*的指针,指向内存空间

就是因为两个方法返回值一样,所以C++17修改了data()的返回值

在C++17标准下,data()返回的是char*

    string strA{ "012345" };
	const char* ptr = strA.c_str();
	std::cout << (int)&strA << " " << (int)&strA[0]
	<< " " <<(int) ptr;

17824348 17824352 17824352

字符串替换

.replace()

.replace(替换的起始位置,要替换的长度,“要替换的字符串”)

    string strA{ "id=username" };
	strA.replace(3, 8, "peter");
	std::cout << strA;

.replace(替换的起始位置,要替换的长度,替换后的字符长度,‘要替换的字符’)

    string strA{ "id=username" };
	strA.replace(3, 8, 6,'a');
	std::cout << strA;

这里输出了id=aaaaaa

.replace(替换的起始位置,要替换的长度,“要替换的字符串”, 要替换的字符串的长度)

    string strA{ "id=username" };
	strA.replace(3, 8, "peterabcde",5);
	std::cout << strA;

.replace(替换的起始位置,要替换的长度,要替换的字符串”, 要替换的字符串起始位置,要替换的字符串的长度)

    string strA{ "id=username" };
	strA.replace(3, 8, "abcdepeterabcde",5,5);
	std::cout << strA;

清除

.erase

..erase(起始位置,要清除的长度)

..erase(起始位置) //如果没有第二个参数,默认清除后面所有

.clear 清零

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值