c++中string的用法
String 容器1.string的基本概念string是c++风格的字符串,用法上和c语言的char *差不多但是从本质上并不一样string是c++中STL(Standard Template Library) 中的一个容器**string本质上是一个类**string和char * 区别:char * 是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char*型
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函数配合使用。
更多推荐
所有评论(0)