复习C++(四)复合类型①

风流意气都作罢 提交于 2020-03-10 13:35:57

一、数组

数组声明时,应指出:
1.存储在每个元素中值的类型
2.数组名
3.数组中的元素数(一般不能是变量,下文将介绍如何打破这一限制)

因为数组是使用其他类型(int,char,float等)来创建的,所以它是一种复合类型。C++数组从0开始编号。

数组的初始化
1.只有在定义数组时才能初始化,不能将一个数组赋给另一个数组。如果只对数组的一部分初始化,编译器会自动把其他元素赋0。如果想把所有数组元素赋0,只需将第一个元素赋0即可(或直接让{ }中为空)。
2.如果[ ]中为空,C++将自动计算元素个数(通过赋值的个数)。
3.禁止缩窄转换。

二、字符串

C-风格字符串结尾为空字符 \0。空字符标识字符串结尾,比如cout在输出时读取到\0才结束输出,否则将内存中随后的各个字节解释为要打印的字符,直到遇到\0。

字符串常量
用" ",双引号括起来的字符串叫字符串常量(或字符串字面值)。
这种方法不用显式地表示空字符\0。"A"不等于’A’,‘A’代表A的ASCII码,"A"实际代表字符串所在的内存地址。
字符串可以直接给数组赋值

1.char name[15];
name=“Leonard”;
这时,name[0]就是’L’

字符串输入
1.cin使用空白(空格、Tab、回车)确定字符串的结束位置,即cin获取字符数组时只读取一个单词,并自动添加空字符。
2.面向行输入
cin这个类提供面向行的类成员函数:getline()和get(),这两个函数读到换行符才停止。不同的是,getline将读取并丢弃换行符,而get将换行符留在输入队列中。

1.cin.getline()	//有两个参数,第一个表示储存此行的数组的名称,第二个是要读取的字符数。

例:
cin.getline(name,18)/要给结尾处的空字符留一个空间,在储存时,丢弃换行符,结尾储存空字符。/

2.cin.get()//与getline类似,只是将换行符保留在输入队列中


cin.get(FirstName,18);
cin.get(LastName,18);
此时,第二个get读取时,发现输入队列第一个字符是换行符,于是直接结束读取,第二行就无法读取了。
但如果在中间加入无参数的get
cin.get(FirstName,18);
cin.get(); //读取一字符(即使是换行符)
cin.get(LastName,18);
这一问题得以解决。
在这里,也可以使用cin.get(FirstName,18).get();
cin.get(LastName,18).get();
之所以可以这样连接,是因为第一个cin.get()返回了一个cin对象,这个对象调用了第二个get()。

读取空行后,将设置失效位,后面的输入将被阻隔,但可以用cin.clear();来恢复。如果输入的字符数比指定的多,多余的将被留在输入队列里。

三、处理字符串的新方式——string类

使用string,首先要添加头文件或者。
string来处理字符串和使用数组基本类似。区别在于,可以将string对象声明为简单变量,而不是数组
例:
string str;
string strX=“Leonard”;
程序能够自动处理string的大小。所以,string类型比char数组更安全。char数组只是用来储存字符串,而string类型本身就是一个字符串。
可以将一个string对象赋值给另一个string对象。+号可以将两个字符串连接。
string的其他操作:strcpy(str1,str2);//将str2的值复制到str1。
strcat(str1.str2);//将str2的值接到str1末尾。
strlen(str1);/指出str1的长度。(未初始化的string类长度自动为0)/
需要注意的是,getline只适用于数组。事实上istream类的设计没有考虑对string类的处理(因为那时候还没有引入string类),但仍然可以使用cin>>str;这样的语句。

四、其他形式的字符串字面值

这里只举例

wchar_t n[]=L"hahahaha";
char16_t m[]=u"AAAAAA";
char32_t x[]=U"asdasjfhkjhkjahskjfh";
//注意u和U分别对应char16_t和char32_t,不可混用。

还有一种类型,原始字符串(raw)。
例:

cout<<R"(wahduaw " "asdasbjk"\n")"

这时\n不表示换行符,而是表示它本身,也就是屏幕上会显示 \n。
其实,在raw中,定界符可自定义,在"和(之间加任意基本字符。但是注意,首尾必须一致,如

cout<<R"saa(asjkdlaskjd)")saa"

前缀R也可以和u,U等前缀结合,R可在前也可在后,如RU,uR都可以。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!