String 容器

1.string的基本概念

	string是c++风格的字符串,用法上和c语言的char *差不多
	但是从本质上并不一样
	string是c++中STL(Standard Template Library) 中的一个容器
	**string本质上是一个类**

string和char * 区别:
char * 是一个指针
string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。

	**特点:**
			string内部有很多的操作,如赋值,拼接,查找替换,比较,插入删除,求子串的操作

2.string的构造函数

	**无参构造:**
		string(); 
		创造了一个空的字符串   
		使用时 如 string a;
	**有参构造**
	string(const char* s);
		使用一个string对象初始化另一个string对象
		char *s="hello world";
		string a(s);
	string(int n, char c);
		使用n个字符c初始化 
		string a(5,'a');
		输出的结果就是
		aaaaa;
	**拷贝构造**
	string(const string& str);
	使用一个string对象初始化另一个string对象
	如string a2(a);
	将字符串a中的值复制(copy)过来;

3.string的基本操作

string的基本操作有赋值操作,字符串的拼接,查找和替换,比较,存取,插入和删除,子串

操作中的参数可以是:单个字符,char * 定义的字符串,或者是一个string类型的字符串
有些操作会有一些int类型的形参,代表着位置

赋值操作

在string模板中提供了两个赋值的操作
一种是靠操作符重载 重置“ = ”去赋值;
第二种是定义了assign函数去赋值;
下面这是全部的赋值操作,实际上我们用的比较多的还是第一种方法
operator= 这种方式是比较实用的

string s="人生苦短,我用c++";

string s1=s;
string s2='a‘;
string s3;
s3.assign("人生苦短,我用c++");
string s4;
s4.assign("人生苦短,我用c++",5);
string s5;
s5.assign(s4);
string s6;
s6.assign(s5,5);

要记住位置是从0开始的(和数组一样),后面都是一样

string& operator=(const char* s);` //char*类型字符串 赋值给当前的字符串

string& operator=(const string &s); //把字符串s赋给当前的字符串

string& operator=(char c); //字符赋值给当前的字符串

string& assign(const char *s); //把字符串s赋给当前的字符串

string& assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串

string& assign(const string &s); //把字符串s赋给当前字符串

string& assign(int n, char c); //用n个字符c赋给当前字符串

字符串拼接操作

同样,也有两种方法
一个是重载了 +=
另外一个是append函数 (这点的操作与python中比较类似)

实际操作

//字符串拼接
//第一种用法
string str1="我";
str1+="在学c++";
str1+='!';
string str2="发现太难了,我不学了。";
str1+=str2;
//实际输出的就是   我在学c++!发现太难了,我不学了。

//第二种用法
string str3="12345";
char *s="678910"
string str4="678";
str3.append(str4);
str3.append(s);
str3.append(s,2); //前两个字符,也就是 67
str3.append(str4,2,3); 从第二个开始到结束的3个字符

函数原型:

string& operator+=(const char* str); //重载+=操作符

string& operator+=(const char c); //重载+=操作符

string& operator+=(const string& str); //重载+=操作符

string& append(const char *s); //把字符串s连接到当前字符串结尾

string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾

string& append(const string &s); //同operator+=(const string& str)

string& append(const string &s, int pos, int n);//字符串s中从pos开始的n个字符连接到字符串结尾

字符串查找和替换

查找:
find函数去查找字符串或者字符第一个次出现的位置,从左向右寻找
rfind函数同样,只不过的从末尾向开头寻找 r=right
这两个函数都是返回的position ,第一次查询到的位置;
如果没有找到则返回-1;
替换
replace函数
replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串
替换的字符串,与原字符串的长度没有关系

string s="Ilove";
int pos1=s.find("v",0);//记得用一个int变量去接收结果
//pos1为3
int pos2=s.rfind("v",s.size());
//pos2为1

string s2=s.replace(0,1,"You");
//把I替换成You

函数原型:

int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找

int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找

int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置

int find(const char c, int pos = 0) const; //查找字符c第一次出现位置

int rfind(const string& str, int pos = npos) const; //查找str最后一次位置,从pos开始查找

int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找

int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置

int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置

string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str

string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串s

字符串比较

功能描述:

字符串之间的比较

比较方式:

字符串比较是按字符的ASCII码进行对比

= 返回 0

返回 1

< 返回 -1
函数原型:

int compare(const string &s) const; //与字符串s比较

int compare(const char *s) const; //与字符串s比较

存取

string中单个字符存取方式有两种

char& operator[](int n); //通过[]方式取字符

char& at(int n); //通过at方法获取字符

如:

string a="hello world";
cout<<a[0]<<endl;
cout<<a.at[0]<<endl;
//两个结果都是h
插入和删除

功能描述:

对string字符串进行插入和删除字符操作

函数原型:

string& insert(int pos, const char* s); //插入字符串

string& insert(int pos, const string& str); //插入字符串

string& insert(int pos, int n, char c); //在指定位置插入n个字符c

string& erase(int pos, int n = npos); //删除从Pos开始的n个字符

string s="234";
s.insert(0,"01");
//此时s为01234
string s1="567";
int n=s.size();
s.insert(n,s1);
//此时s为01234567
s.insert(s.size(),3,'1');
//此时s为01234567111
s.erase(0,2);
//此时s为234567111

子串

功能描述:**

从字符串中获取想要的子串

函数原型:

string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串

string s='abcde';
string sub=s.substr(0,2);
//sub为abc;

这个功能非常好用,可以用来解决要去查找目标子串的问题,与前面的find函数配合使用。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐