一、String类简介
ISO/ANSI C++98标准通过添加string类扩展了C++库, 因此现在能够以string类型的变量而不是字符数组来存储字符串,string类使用比字符数组简单,同时提供了将字符串作为一种数据类型的表示方法。
二、String类使用
要使用string类,必须包含头文件string,且该类位于命名空间std中,因此需要使用using编译指令或使用std::string来引用。
string对象和字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组。类的设计让程序能够自动处理string的大小,这会使得使用string对象更方便,也更安全。
2.1、初始化
使用C-风格字符来初始化string对象
#include <string>
string str1 = "education";
string str2 {"school"};
string str3 = {"students"};
2.2、拼接、赋值和附加
这些操作比数组更简单,比如数组无法直接进行相互赋值,但是string对象可以赋值给另一个string对象。
string str1 = "education";
string str2 = str1;
string类简化了字符串合并的操作,可以使用+运算符将两个string对象合并起来,还可以使用运算符+=将字符串附加到string对象的末尾。
string str3;
string str3 = str1 + str2;
str1 += str2;
在C++新增string类之前,程序员使用C语言库中的函数来完成这些字符串的处理。头文件cstring提供了这些函数,strcpy()将字符串复制到字符数组中,strcat()将字符串附加到字符数组末尾。
char charr1, charr2;
strcpy(charr1, charr2); //copy charr2 to charr1;
strcat(charr1, charr2); //append contents of charr2 to charr1;
需要注意使用字符数组进行字符串的操作,总是存在目标数组过小,无法存贮指定信息的危险。这将会覆盖相邻内存,导致程序终止或数据损坏。因此C函数库提供了strcat()和strcpy()相似的函数,strncat()和strncpy(),他们接受指出目标数组最大允许长度的第三个参数,因此更安全。
2.3、获取长度
函数strlen()是一个常规函数,获取一个C风格字符串作为参数,并返回该字符串包含的字符数;函数size()功能相同,但是size()是作为类方法被string类对象调用。
char charr1;
string str1;
int len1 = str1.size(); // obtain length of string type object : str1
int len2 = strlen(charr1); //obtain length of char array type object: charr1