字符串系列二: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中找到。

原文地址:https://www.cnblogs.com/sophia-yun/p/3158869.html