【C++】string

string+一些题目
摘要由CSDN通过智能技术生成

没写完没写完,CSDN又不让我删了重新编辑,就先放个半成品在这,这两三天就写完

-------------

什么是string,为什么要学习string

C 语言中,字符串是以 '\0' 结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP 的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

在刷题的时候也经常可以看到一些题目:

类似将字符串交换位置、相加、转化整形等

在这些题目里面,题目基本都是以string类的形式出现:

string是字符串类型,对于字符串的操作用string来会更加简单、方便且快捷

---------

标准库的string

这里有一个C++的网站可以帮助我们来了解string,缺点是全英文

string - C++ Reference (cplusplus.com)

这里借用参考的翻译:

1. 字符串是表示字符序列的类
2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
3. string 类是使用 char( 即作为它的字符类型,使用它的默认 char_traits 和分配器类型 ( 关于模板的更多信息,请参阅basic_string)
4. string 类是 basic_string 模板类的一个实例,它使用 char 来实例化 basic_string 模板类,并用 char_traits和allocator 作为 basic_string 的默认参数 ( 根于更多的模板信息请参考 basic_string)
5. 注意,这个类独立于所使用的编码来处理字节 : 如果用来处理多字节或变长字符 ( UTF-8) 的序列,这个类的所有成员( 如长度或大小 ) 以及它的迭代器,将仍然按照字节 ( 而不是实际编码的字符 ) 来操作。

大概也就是看着多,这里可以这么理解:

string是一个字符串类型

这个类里面的操作办法跟常规的接口相同,然后加了一些专门操作string的函数

 string的底层是basic_string模板类的别名

不能操作多字节或者变成字符的序列

要包含头文件<string>

常用的几个接口 

初始构造:

string有以下几个构造的办法:

    string c1 = "hellow world"; //通过字符串的初始赋值
	string c2("hello world");   //同上
	string c3(c1);//拷贝构造

除此之外,还有多种构造:

    string c4("hello worldxxxxxxxx", 11); //截取长字符串的前n个字符
    string c5(10, 'c');	//开十个字节的空间并全部初始化为字符c
	string c6("xxxhello worldxxxx", 3, 11); //用一个常量字符串的下标为3的位置到下表为11的位置初始化c6

总之,挺多的,当然,也可以什么都不给,创见一个空的字符串:

string c7;

但是如果直接去打印出来看的话,会发现这里直接空的一排:

如果这个时候调试,我们会看到这样的三个数值 

size、capacity和原始试图,暂且不管最后的原始视图,先看前面两个参数:

size指的是string里面有的字符数量,而capacity则是还可以放多少

这里什么都没打印出来,里面真一个字符都没有吗?

倒也不是

因为它(C++)要兼容C,所以这里其实还有一个'\0'

-------

string的容量操作

这里要介绍几个常用的:

size:返回字符串的有效字符长度

length:返回字符串有效字符长度(跟上面类似,甚至功能重叠,还是C的问题...)

capacity:返回空间总大小

empty:检查字符串是否为空,如果为空就返回true,反之

clear:清空有效字符串

reserve:为字符串保留空间

resize:将有效字符串的个数改成n个,其他的空间会被字符填充

----

一个一个来看:

size和length

 可以看到返回的字符大小里面不包括最后的’\0‘

----------

capacity

上面我们拿一个空字符串来看的时候这里的capacity也是15,所以string的初始字符串容量是15个字节,这里提一下,如果空间不够用的话它会自动扩容,大小大概是自身的1.5倍

-------------

empty

-----------

clear

可以看到第一次还能打印出hello world,在用过一次clear后就什么也打印不出来了

------------

reverse 

这里,c1原本是容量是15,初始化hello world用了11的空间,剩4个,然后我reserve里面填20,让编译器给我保留20个字节的空间,它就扩容11+20 = 31个字节的空间

这是往大了扩,加入我要往小了,会发生什么?

 

可以看倒初始的容量是15个字节,15-11=4,这里还剩4个字节的空间,我要保留2个字节:

还是15个字节,也就是说它不会往小了改变容量,如果这里看的不详细,我们把容量变大一点:

首先15个字节的空间,开辟到200,然后再缩减到50,可以看到里面的容量还是200,没有改变。

再看详细一点,打开调试:

一开始的11个字节和15容量没有截图,这里是扩容至200&

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值