在C语言里面,字符串用char*来声明。在c++中定义了string类,包含在头文件<string>中。
string中封装了char*,是一个char*的容器,并且提供了很多实用的成员方法。
使用string的时候不用像char*需要考虑内存的释放和越界,这些都由string类内部进行管理。
1.创建string对象
(1)创建一个空字符串
string str;
(2)使用一个字符串初始化string
string str("test");
(3)使用一个string对象初始化另一个对象
string str("test");
string str1(str);
(4)使用n个相同字符初始化string对象
string str(10,'a');
2.使用‘=’对string进行赋值操作
(1)使用字符串对string对象进行赋值
string str = "test";
(2)将一个string对象赋值给另一个string对象
string str ="test";
string str1 = str;
(3)将一个字符赋值给string对象
string str = 'a';
3.使用assign对string对象进行赋值操作
(1)使用字符串对string对象进行赋值
string str;str.assign("test");
(2)用字符串的前n个字符对string对象进行赋值
string str;str.assign("test",2);
(3)将一个string对象赋值给另一个string对象
string str;
string str1 = "test";
str.assign(str1);
(4)使用n个相同的字符对string对象进行赋值
string str;str.assign(10,'a');
(5)截取一个string对象的从第n个字符开始(n从0开始),取m个字符赋值给另一个string对象
string str = "woshidashab";
string str1;
str1.assign(str,0,5);//从str的第0个字符开始取5个字符赋值给str1
4.使用[]访问string对象中的指定字符
string str = "test";
for(int i = 0;i<str.size();i++){
std::cout<<str[i]<<std::endl;
}
4.使用at访问string对象中的指定字符
string str = "test";
for(int i = 0;i<str.size();i++){
std::cout<<str.at(i)<<std::endl;
}
5.使用[]和at访问string对象中的字符的区别
使用[]访问时如果越界程序会直接挂掉,使用try{}catch{]不能捕获到异常
使用[]访问时如果越界程序会抛出一个out_of_ranged的异常,使用try{}catch{]可以捕获到该异常
6.使用‘+=’进行字符串的拼接
(1)拼接一个string对象
string str="hello ";
string str1="world!";
str+=str1;
(2)拼接一个字符串
string str="hello ";
str+=“world!”;
(3)拼接一个字符
string str = "this is ";
str +='a';
7.使用append进行字符串的拼接
(1)拼接一个字符串
string str = "hello ";
str.append("world");
(2)取字符串的前n个字符拼接到原字符串后面
string str = "hello ";
str.append("world",5);
(3)拼接一个string对象
string str = "hello ";
string str1 = "world";
str.append(str1);
(4)将一个string对象从n开始取m个字符拼接到原字符串的后面
string str = "hello ";
string str1 = "world";
int n = 0;
int m = 5;
str.append(str1,n,m);
(5)拼接n个相同的字符c
string str = "test";
int n = 5;
char c = 'a';
str.append(n,c);
8.使用find进行字符串的查找,如果找到指定字符串则返回该字符串第一次出现的位置,找不到返回-1
(1)在string对象str中,从第n个字符开始查找,查找第一次出现string对象str1的位置
string str = "this is a test";
string str1 = "is";
int n =0;
int pos = str.find(str1,n);//n可以不传,不传的话默认是0
(2)在string对象str中,从第n个字符开始查找,查找第一次出现字符串“is”的位置
string str = "this is a test";
int n =0;
int pos = str.find("is",n);
(3)在string对象str中,从第n个字符开始查找,查找字符串“isaa”的前2个字符第一次出现的位置
string str = "this is a test";
int n =0;
int pos = str.find("isaa",n,2);
(4)在string对象str中,从第n个字符开始查找,查找字符c第一次出现的位置
string str = "this is a test";
char c = 'h';
int n =0;
int pos = str.find(c,n);
8.使用rfind进行字符串的查找,如果找到指定字符串则返回该字符串最后一次出现的位置,找不到返回-1
(1)在string对象str中,从第n个字符开始查找,查找最后一次出现string对象str1的位置
string str = "this is a test";
string str1 = "is";
int n =0;
int pos = str.rfind(str1,n);//n可以不传,不传的话默认是0
(2)在string对象str中,从第n个字符开始查找,查找最后一次出现字符串“is”的位置
string str = "this is a test";
int n =0;
int pos = str.rfind("is",n);
(3)在string对象str中,从第n个字符开始查找,查找字符串“isaa”的前2个字符最后一次出现的位置
string str = "this is a test";
int n =0;
int pos = str.rfind("isaa",n,2);
(4)在string对象str中,从第n个字符开始查找,查找字符c最后一次出现的位置
string str = "this is a test";
char c = 'h';
int n =0;
int pos = str.rfind(c,n);
9.使用replace进行字符串的替换
(1)在string对象str中,将从n开始的m个字符替换为string对象str1
string str = "this is a test";
string str1 = "aa";
int n = 0;
int m = 2;
str.replace(n,m,str1);
(2)在string对象str中,将从n开始的m个字符替换为字符串“aa”
string str = "this is a test";
int n = 0;
int m = 2;
str.replace(n,m,"aa");