第三章 标准库string、vector、bitset类型 —— 第一节 标准库string类

第三章 标准库类型

关于C++的几篇博客,参考人民邮电出版社的《C++ Primer 中文版》一书。

本章着重介绍标准库中的string、vector、bitset类。


第一节 标准库string类

一、string对象的初始化方式

string对象的初始化方式
方式含义
string s1调用string类的默认构造函数,为空串
string s2(s1)将s2初始化为s1的一个副本
string s3("value")将s3初始化为一个字符串字面值副本
string s4(n, 'c')将s4初始化为字符‘c’的n个副本

 二、string对象的读写

例1:

string s;
cin >> s;
cout << s << endl;
输入:"      Hello World!     "(注意开头和结尾有多个空格)

输出:"Hello" (不含任何空格)

例2:

string s1, s2;
cin >> s1 >> s2;
cout << s1 << s2 << endl;
输入:同上

输出:"HelloWorld!" (注意没有任何空格,Hello和World中间也没有空格)


由上述两个例子总结得出:

1、string类型的输入操作符,读取并忽略开头所有的空白字符;当再次遇到空白字符,读取终止。

2、输入输出操作符返回左操作数,作为运算结果。这点和内置类型的输入输出操作是一致的。


例3:

string line;
// read line at time until end-of-file
while ( getline ( cin, line ) )
    cout << line << endl;

说明:getline函数从输入流的下一行读取,读到下一个换行符出现为止,不包括换行符。当getline函数返回EOF(end of file)时,while的判读语句为false,则终止getline读取循环,认为输入流的数据已读完。


三、string对象的操作

string操作
s.empty()如果s为空串,则返回true
s.size()返回s中字符的个数(注意不要和C的字符数组混淆,string结尾没有'\0'空字符,所以返回的string长度就是实际字符的个数)
s[n]
s1 + s2s1和s2前后串联成一个新字符串
s1 = s2将s1替换为s2的副本
v1 == v2比较两个string(注意两点:第一,比较时区分大小写,大写小于小写;第二,如果短字符串真包含于长字符串,则短的小于长的)
!=, <, <=, >, >=比较字符串时,规则同上


两点注意:

1、string的 '+' 操作符,左右操作数必须有至少一个string对象。

例4:

string s1 = "hello";                       
string s2 = "world";
string s3 = s1 + ", ";                                      // ok
string s4 = "hello" + ", ";                              // error
string s5 = s1 + ", " + "world";                    // ok
string s6 = "hello" + ", " + s2;                      // error

2、关于string::size_type类型:

* 它是 string.size() 成员函数的返回类型。

* 它也是string[n]读取单个字符时,字符索引n所应该表示的数据类型。

size_type是string的配套类型(companion type),它定义为与unsigned(unsigned int 或者 unsigned long)型具有相同的定义。

note:对于任意给定数据类型,它的unsigned型所能表示的最大正数值比对应的signed型要大一倍。

所以,为防止溢出,当用成员函数所size()或用索引读取单个字符时,返回值或索引的数据类型最好定义为string::size_type类。


四、string对象中字符的处理

cctype 定义的函数
isalnum(c)若为字母或数字,则返回真
isalpha(c)若为字母,则返回真
iscntrl(c)若为控制字符则返回真
isdigit(c)若为数字则返回真
isgraph(c)如果c不是空格,但可打印,则返回真
islower(c)若为小写字母则返回真
isprint(c)若为可打印字符则返回真
ispunct(c)若为标点符号则返回真
isspace(c)若为空白字符,则为真
isupper(c)若为大写字母则返回真
isxdigit(c)若为16进制数,则返回真
tolower(c)返回小写字母
toupper(c)返回大写字母

说明:

可打印字符:可以显式表示的字符

空白字符:空格、制表符、回车符、换行符等

标点符号:除数字、字母、可打印的空白字符(如空格)以外的其他可打印字符


注意:

C++标准库包括C标准库。C++中的头文件cctype其实就是利用了C标准库函数,这些函数就定义在C标准库中的cype.h中。(C标准库头文件命名为name.h,C++命名为cname,加c表示该头文件源自C标准库。)因此这两个文件内容是一样的,只是后者采用了更适合C++程序的形式。cname头文件中定义的名字都定在命名空间std内,但name.h则不是这样的。所以,C++程序通常采用cname这种头文件版本,而不采用name.h,这是为了让标准库中的名字都一致属于std命名空间,以防给程序带来负担。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值