现在的位置: 首页 > 综合 > 正文

[C++ Primer] 标准库string类型

2019年08月13日 ⁄ 综合 ⁄ 共 1032字 ⁄ 字号 评论关闭

[杂记:C++中类型

一、内置类型

如int, char, float, unsigned等。内置类型是最基本的类型。

二、复合类型

复合类型:使用其它类型定义的类型。有三种复合类型:引用,指针,数组。

三、类类型

就是类。比如string以及自己定义的类。

]

1.由于历史原因以及为了与语言兼容,字符串字面值与标准库string类型不是同一种类型,前者是C风格字符串以“NULL”结尾.

2.string读取并忽略开投所有的空白字符(如空格,换行,制表符),读取字符知道再次遇到空白字符,读取终止。例如输入"  HELLO  WORLD  ",实际读取的是“HELLO”,不含任何空格,如果想读取一行使用getline读取整行文本。

3.string中size等函数返回string大小的值因该用string:size_type来存储,而不是把返回值赋给一个int变量。那么为什么这样使用呢?string和其他库类型都定义了一些配套类型(比如string:size_type,定义为unsigned型,unsigned int或unsigned long,足够大保证存储任意string对象的长度),通过配套类型就能使得库类型的使用与机器无关(在16位机上,int只有2个字节大小。所以为了避免溢出最好使用配套类型,同时也是一种规范)。

4.和字符串字符串字面值的连接:当进行string对象和字符串字面值混合连接时,“+”的左右操作数至少有一个是string类型,比如s = “hello”+","+s2就是错误的。

5.C风格字符串与string类型的混合使用问题:可以使用C风格字符串对string对象进行初始化和赋值,例如string st2(“hello”);反之则不成立,如char *st = st2是错误的。string类型提供了c_str的成员函数,来返回C风格字符串,但是返回的是const chat类型数组,所以正确的初始化应该是 const char *st = st2.c_str()(c_str返回的数组并不保证一定是有效的,接下来对st2的操作可能会改变st2的值,使刚才返回的数组失效,所以最好复制c_str函数返回的数组然后再赋值);

6.string s;while(cin>>s);这里隐式使用了IO标准库定义的类型转换,cin>>s表达式返回的仍是cin类型,而while循环条件是bool类型,将iostream类型转换为bool型,如果读取成功则转换为true,否则转换为false。

抱歉!评论已关闭.