字符串系列二:C++标准库string类型
C++语言提供了专门处理长度可变的字符串的标准库string类型,标准库负责管理与存储字符相关的内存并提供字符串相关操作,头文件为"string"。
(1)string类型的定义和初始化
string标准库支持以下几个构造函数:
构造函数 | 功能 |
string s | 默认构造函数,s初始化为空串 |
string s2(s1) | 将s2初始化为s1的一个副本 |
string s3("value") | 用一个字符串字面值副本初始化s3 |
string s4(n, 'c') | 将s4初始化为字符'c'的n个副本 |
string s5(cp,n) | 将s5初始化为cp所指向数组的前n个元素的副本 |
string s6(s1,pos) | 用s1中从下标pos开始的字符的副本对s6初始化,如果pos>s1.size(),该操作未定义 |
string s7(s1,pos,len) | 用s1从下标pos开始的len个字符的副本初始化s7,无论len为多少,最多只能复制s1.size()-pos个字符 |
注意:字符串字面值与标准库类型string类型并不是同一种类型,编程时应加以区分。
(2)string对象的读写
C++中可以使用标准输入输出操作符来读写string对象。使用标准输入读入string时,会忽略开头所有的空白符(如空格、换行符、制表符),读取直到再次遇到空白符时终止。
如下面的程序,输入的字符串为"Hello world!",s中保存的字符串为"Hello",输出的结果也为"Hello"。
1 string s; 2 cin>>s; 3 cout<<s<<endl;
如果修改为如下,那么输出为"Helloworld!"。
string s1,s2; cin>>s1>>s2; cout<<s1<<s2<<endl;
使用getline读取字符串时,直到遇到换行符截止,同时不保留结尾处的换行符。
(3)字符串相关操作
a. size()函数 string标准库的size()函数返回字符串的长度,但是返回的类型不是整型,而是string::size_type,这同vector标准库中的操作。这是因为string类类型和其他许多库类型都定义了一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类型中的一种,它定义为与unsigned(unsigned int或unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。在使用size_type时,需要加上域操作符来说明所使用的size_type类型是由string类定义的。
b. 和字符串字面值连接 string对象可以通过加号直接连接,但是字符串字面值不是string类对象,当需要将string对象和字符串字面值连接时,返回的是一个string对象,但是不能直接将两个字符串字面值直接通过相加连接,因为它们是C风格字符串。
c. 下标操作可用作左值 string对象的下标操作返回值是左值,可以对相应的字符进行修改,如:
string s("hello"); s[1] = '-';
d. 字符串中字符的处理 有的时候需要处理一个string对象中具体的某个位置的字符,此时可以通过包含头文件cctype调用相关的函数进行处理;cctype其实就是利用了C标准库函数,这些库函数定义在C标准库的ctype.h头文件中。
C++标准库中具体的处理字符串的一些操作可以在文章http://www.cnblogs.com/sophia-yun/articles/3153473.html中找到。