c++98通过添加string类扩展了c++库,现在可以用string类型的变量而不是字符串数组来存储字符串,使用起来比c风格的字符数组更简单。注:使用string类,必须包含头文件string。string位于名称空间std中,因此必须提供一条using编译指令。
1:使用string对象的方式与使用字符串数组的相同之处
- 使用c-风格字符串来初始化string对象 ,比如,string str="panther";
- 使用cin来将单个字符串通过键盘输入存储到string对象中,比如,string str1;cin>>str1;
- 使用cout来显示string字对象,比如,string str="panther";cout<<str<<endl;
- 使用数组表示法来访问存储在string对象中的字符串,比如,string str="panther";cout<<str[2]<<endl;
- 主要区别是可以将string对象声明为简单变量,而不是数组,比如,string str1; string str2="pan";
- 类设计让程序自动处理string的大小,比如,string str1;str1的声明使得程序创建一个长度为0的string对象,但当程序将输入读取到str1中时,将自动调整str1的长度。cin>>str1;
3:c++11字符串初始化,允许将列表初始化用于c-风格字符串和string对象
char first_date[]={"fh"}; char second_date[] {"fh"}; string third_date={"hf"}; string fourth_date {"hf"};
4:string对象的赋值、拼接和附加操作,使用string类时,某些操作比使用数组要简单很多。
赋值:不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象。
比如,
char charr1[20];
char charr2[20]="sugar";
string str1;
string str2="pand";
charr1=charr2;//无效的
str1=str2;//有效的
拼接:运算符+将两个string对象合并起来比如,
string str;
str=str1+str2;
附加:运算符+=将字符串附加到string对象的末尾比如,
str1 +=str2;//将str2添加到str1的末尾
5:string类的其他操作在c++新增string类之前,也要完成给字符串赋值,拼接等工作。对于这种c-风格字符串,一般程序员使用c语言库中的函数来完成任务。库函数包含在头文件cstring中,使用时必须包含(以前为string.h)。
比如,strcpy()函数将字符串复制到字符数组中,strcat()函数将字符串附加到字符数组末尾。程序如下:
#include <iostream>
#include <string>//使得string类有效
#include <cstring>//c-风格字符库
using namespace std;
int main()
{
char charr[30];
char charr1[20];
char charr2[20]="sss";
string str;
string str1;
string str2="ppp";
//字符串赋值操作
str1=str2;
strcpy(charr1,charr2);
//字符串附加操作
str1 += "A";
strcat(charr1,"A");
//字符串拼接操作
str=str1+str2;
strcpy(charr,charr1);
strcat(charr,charr2);
//字符串长度
int len1=str1.size();
int len2=strlen(charr1);
cout<<charr<<" "<<charr1<<" "<<charr2<<endl;
cout<<str<<" "<<str1<<" "<<str2<<endl;
cout<<"The string "<<str1<<" contains "<<len1<<" characters"<<endl;
cout<<"The string "<<charr1<<" contains "<<len2<<" characters"<<endl;
return 0;
}
从程序中可以看出,string对象比c-风格字符串使用更简单,并且在使用数组时,总是存在目标数组过小,无法确定存储信息的危险,而string对象具有自动调整大小的功能,从而避免这种问题的发生。
给出另一种字符串操作,确定字符串中字符数
//字符串长度
int len1=str1.size();
int len2=strlen(charr1);
strlen()是一个常规函数,接受一个c-风格字符串作为参数,并返回该字符串包含的字符数。str1是一个string对象,而size()是string类的一个方法。总之c函数使用参数来指出要使用哪个字符串,而c++string类对象使用对象名和句点运算符来指出使用哪个字符串。6:string类I/O
string类和c-风格字符串都可以用cin读取单个字符串,当需要读取整行时,string使用的句法相比c-风格字符串有所不同。
- cin.getline(charr,20); //c-风格字符串:将一行代码读取到数组中
- getline(cin,str); //string对象:将一行代码读取到string对象中
除了char类型外,c++还有类型
可以创建这些类型的数组和字符串字面值。对于这些类型的字符串字面值,c++分别使用前缀L、u、U表示。
wchar_t a[]=L"He is a good guy";
chart16_t b[]=u"She is a good girl";
chart32_t c[]=U"Super man Super man";
可以创建这些类型的数组和字符串字面值。对于这些类型的字符串字面值,c++分别使用前缀L、u、U表示。