- 使用string类需要将其头文件包含到程序中,预处理命令为:
#include <string> //不能写为string.h
一、字符串对象
- 1.字符串对象的定义和初始化
- 定义和初始化字符串对象,与变量的方法类似。如果string对象没有初始化则一律为空字符串。需要注意的是C++字符串不需要NULL字符结尾。
char S1[20]; //C风格字符串
string str1; //定义string对象
string sx,sy,sz; //定义多个string对象
char S2[20]="Java"; //C风格字符串初始化
string str2="Java"; //string对象复制初始化
string str3("C++"); //string对象直接初始化
- 2.字符串对象的引用
- 与变量类似,直接使用string对象名就表示它的引用
str1="Pascal"; //使用string对象
- 字符串对象的输入和输出
- 可以在输入输出语句中直接使用string对象来输入输出字符串
cin>>str1; //输入字符串到str1对象中存放
cout<<str1; //输出str2对象中的字符串
gets(S1); //输入C风格字符串到字符数组中存放,对于C++风格的字符串对象是不能这样使用的
puts(S2); //输出C风格字符串,对于C++风格的字符串对象是不能这样使用的
- 4.字符串对象与C风格字符串的转换
str1="Java";
//C风格字符串可以直接赋给string
str1.c_str();
//string转换为C风格字符串,返回char指针
str1.copy(S1,n,pos);
//把str1中从pos开始的n个字符复制到S1字符数组
二、字符串对象的操作
string对象允许使用运算符进行操作,实现类似C风格字符串的处理。如复制(strcpy)、连接(strcat)、比较(strcmp)等。
字符串赋值
- string对象可以使用赋值运算,其功能是 字符串复制。可以将字符串常量赋给string对象
str1="Pascal"; //字符串常量复制给string对象中
strcpy(S1,"Pascal"); //C风格字符串复制到字符数组中
str1.assign(S1,n); //将C风格字符串S1开始的n个字符赋值给str1
- 字符串连接运算
- string对象允许使用加号(+)和复合赋值(+=)运算符来实现两个字符串连接操作。
str1="12",str2="AB",str3="CD";
str1=str2+str3; //str1结果为ABCD
str1=str1+"PHP"; //结果为12PHP
str1+=str3; //str1结果为12CD
- 字符串关系运算
- string对象可以使用关系运算符来对字符串进行比较
str1="ABC",str2="XYZ";
str1>str2; //结果为假
str1==str2; //结果为假
str1=="ABC"; //结果为真
- 其他操作
- string对象可以调用其成员函数来实现字符串处理,这里列举一些重要的操作,更详细的内容可以查阅C++标准手册。
str1="ABCDEFGHIJK";
//获取字符串的长度
n=str1.size(); //n为11
n=str1.length(); //n为11
//检查字符串是否为空字符串
b=str1.empty(); //b为假
//得到子字符串
str2=str1.substr(2,4); //从下标2开始的4个字符,str2为CDEF
//查找子字符串
n=str1.find("DEF",pos); //从pos开始查找字符串"DEF"在str1中的位置,n为3
//删除字符
str1.earse(3,5); //从下标3开始往后删5个字符,str1变为ABCIJK
//增加字符
str1.append("12345",1,3); //在str1末尾增加"12345"下标从1开始的3个字符,即"234"
//字符串替换和插入操作
str1.replace(p0,n0,S1,n); //删除从p0开始的n0个字符,然后在p0处插入字符串S1前n个字符
str1.replace(p0,n0,str2,pos,n); //删除从p0开始的n0个字符,然后在p0处插入字符串str2中从pos开始的前n个字符
str1.insert(p0,S1,n); //在p0位置插入字符串S1前n个字符
str1.insert(p0,str2,pos,n); //在p0位置插入字符串str2中从pos开始的前n个字符