C++学习日记(13)—— string类

同样是存储字符串

string类使用起来会比数组简单

同时提供了将字符串作为一种数据类型的表示方法

要使用string类,必须包含头文件string

string类位于名称空间std

和字符数组的主要区别在于

你可以直接声明string为一个变量

而不是一个数组

例如string str1;

IDE能自动处理string的大小

从理论上来说,char数组视为一组用于存储一个字符串的char存储单元

而string类变量是一个表示字符串的实体


初始化

没什么太大区别,包括使用C11的列表初始化

string str1=”hello”;

string str2={“hello”};

这两种都是没问题的

你一样可以用cin和cout来操作string的读写


赋值、拼接和附加

你不能将一个数组赋值给另一个数组

但是可以把一个string对象赋给另一个string对象

str1 = str2;

string类简化了字符串合并的操作

你可以使用运算符把两个string对象合并起来

string str3;

str3 = str1 + str2;

这样2的内容就拼接到了1的末尾


string类的其他操作

在string这个头文件还没出现前

大家给字符串赋值啥的都会用C语言库里的

string.h头文件,也就是cstring

例如使用strcpy(charr1, charr2);

把charr2的内容赋值给1

但是因为他不能自动调整大小

所以当2的字节数大于1的时候会导致程序over

还有strcat(charr1,charr2);

把charr2的内容附在1的后面

确定字符串的数目则有另外一个函数

int number = strlen(charr1);

对于string我们用的是

int number = str1.size();

在这里strlen是一个函数

但size()是string类的一个方法

两个对应的头文件不同


string类的I/O

函数strlen()从数组的第一个元素开始计算字符数

遇到空字符停止计数,如果没有初始化

那么空字符是随机的,有可能计数不准

但str在未被初始化的时候,长度就已经默认是0了

 

将一行输入读取到数组的代码

cin.getline(charr, 20);

cin后面的. 表示getline()是istream类的一个类方法

第一个参数是目标数组,第二个参数是数组长度

 

将一行输入读取到string类代码

getline(cin,str);

这里没有句点了,表示这里的geline不是类方法

而是把cin作为参数,自己查找cin输入了啥

这意味着

istream类其实是没有处理string对象的类方法的

但是cin>>str;这样的语句依旧可行


其他形式的字符串字面值

wchar_t       前缀L

char16_t      前缀u

char32_t      前缀U

还有一种C11新增的原始(raw)字符串

在原始字符串的中,字符表示的就是自己

例如序列\n就不是换行了,就是\和n

使用前缀R来标识原始字符串

cout<<R”(hello,world\n)”<<endl;

最后输出的是hello,world\n

在原始字符串中,按下回车

不仅会移到下一行,而且还会添加回车字符串

如果要输出括号,则必须在括号前后加上R”+*和+*”

cout<<R”+*(”(hello,world\n)”)+*”<<endl;

最后输出的是hello,world\n


下节介绍一下另一种复合类型——结构

发表评论

您的电子邮箱地址不会被公开。