C++常用STL容器--string
string是C++风格的字符串,但本质上是一个类
特点
- string类内部封装了很多成员方法,例如:查找find,拷贝cope,删除delete,替换replace
- string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
string构造函数
函数原型
-
string();
//创建一个空的字符串 -
string(const char*s);
//使用字符串s初始化 -
string(const string& str);
//使用一个string对象初始化另一个string对象 -
string(int n,char c)
;//使用n个字符c初始化
示例
//1、默认构造
string s1;
//2、使用字符串str初始化
const char* str = "hello C++";
string s2(str);
//3、使用一个string对象初始化另一个string对象
string s3(s2);
//4、使用5个字符a初始化,结果为"aaaaa"
string s4(5, 'a');
string赋值
函数原型
=
-
.assign(str);
//字符串赋值 -
.assign(str,n);
//将str的前n个字符赋给当前字符串 -
.assign(n,elem);
//用n个elem字符赋给当前字符串
示例
//1、将char*类型字符串赋值给当前字符串
string str1 = "hello world";
//2、string变量赋值
string str2 = str1;
//3、单个字符赋值
string str3='a';
//4、使用assign进行字符串赋值
string str4.assign("hello C++");
//5、将字符串的前5个字符赋给当前字符串,str5结果为"hello"
string str5.assign("hello C++",5);
//6、使用assign进行字符串赋值
strig str6.assign(str5);
//7、用5个字符赋给当前字符串,str7结果为"wwwww"
string str7.assign(5,'w');
string字符串拼接
函数原型
-
+=
//string变量拼接 -
.append(str);
//字符串拼接 -
.append(str,n);
//将str的前n个字符赋给当前字符串
示例
//1、char*类型字符串拼接
string str1 = "hello";
str1 += "C++";
//2、string变量拼接
string str2 = "python";
str1 += str2;
//3、字符串拼接
string str3 = "i";
str3.append("love");
//4、将字符串的前3个字符赋给当前字符串,str3结果为i love c++"
str3.append("c++python",3); //相当于str3.append("c++python",0,3)
//5、string变量拼接
str3.append(str2);
string字符串查找、替换
函数原型
-
.find(pos)
//查找方法 -
.replace(pos,y,str)
//替换方法
示例
//1、查找
string str1 = "abcdefgde";
int pos = str1.find("de"); //从左往右找,结果为3
pos = str1.rfind("de"); //从右往左找,结果为7
//2、替换
str1.replace(1,3,"1111"); //从1号位置起 3个字符替换为“1111”
注意:
- find查找是从左往右,rfind从右往左
- find找到字符串后返回查找的第一个字符位置,找不到返回-1
- replace在替换时,要指定从哪个位置其,多少个字符,替换成什么样的字符串
string字符串比较
函数原型
.compare(str2)
实际上是将两个字符串中的字母的ascll值逐个对比,主要用于比较是否相等
示例
string str1 = "abc";
string str2 = "bbc";
if (str1.compare(str2) == 0){
cout << "str1等于str2" << endl;
}
else if (str1.compare(str2) > 0){
cout << "str1大于str2" << endl;
}
else{
cout << "str1小于str2" << endl;
}
string字符获取
函数原型
[n]
.at(n)
两中方式均可以获取单个字符
示例
string str = "hello";
//1、通过[]访问单个字符,结果为"h e l l o"
for (int i=0; i<str.size(); i++){
cout << str[1] << " ";
}
//2、通过at方式访问单个字符,结果为"h e l l o"
for (int i=0; i<str.size(); i++){
cout << str.at(i) << " ";
}
//通过[]修改单个字符,结果为xello
str[0] = 'x';
//通过at修改单个字符,结果为xyllo
str.at(1) = 'y';
string 插入和删除
函数原型
插入方法:.insert(pos,str)
//在pos位置插入str字符串.insert(pos,n,char c)
//在pos位置插入n个字符c
删除方法:.erase(pos,npos)
//删除从pos位置到npos位置的字符串
示例
string str = "hello";
//插入,结果为"h111ello"
str.insert(1,"111");
//删除,结果为"hello"
str.erase(1,3);
string 截取子串
函数原型
-
.substr(pos,npos)
//获取从pos位置到 npos-1位置的字符串
示例
string str = "abcdef";
//截取,结果为“bcd”
subStr = str.substr(1,3);
//实用操作,从邮件地址中获取 用户名信息
string email = "zhangsan@foxmail.com";
int pos = email.find("@"); //获取@符号位置,结果为8
string userName = email.substr(0,pos); //获取从0到7的字符串