字符串
在c++ 中使用字符串string,需要引入头文件
#include<string>
定义string变量的方法
string a;//字符串为空,""
string b="abc";//字符串为abc
string c=b;//用b对c直接赋值,c的内容是abc
string d(5,'c');//d的内容为ccccc
转换为C风格的字符串
转换函数 c_str(),能够将 string 字符串转换为C风格的字符串,并返回该字符串的 const 指针(const char*)
string path = "D:\\demo.txt";
FILE *fp = fopen(path.c_str(), "rt");
为了使用C语言中的 fopen() 函数打开文件,必须将 string 字符串转换为C风格的字符串。
字符串的拼接
使用+
或+=
运算符来直接拼接字符串
用+
来拼接字符串时,运算符的两边可以都是 string 字符串,也可以是一个 string 字符串和一个C风格的字符串,还可以是一个 string 字符串和一个字符数组,或者是一个 string 字符串和一个单独的字符
#include <iostream>
#include <string>
using namespace std;
int main(){
string s1 = "first ";
string s2 = "second ";
char *s3 = "third ";
char s4[] = "fourth ";
char ch = '@';
string s5 = s1 + s2;
string s6 = s1 + s3;
string s7 = s1 + s4;
string s8 = s1 + ch;
cout<<s5<<endl<<s6<<endl<<s7<<endl<<s8<<endl;
return 0;
}
//输出结果
first second
first third
first fourth
first @
string 字符串的增删改查
一. 插入字符串
insert() 函数可以在 string 字符串中指定的位置插入另一个字符串
string& insert (size_t pos, const string& str);
//pos 表示要插入的位置,也就是下标;str 表示要插入的字符串,它可以是 string 字符串,也可以是C风格的字符串。
//pos不能越界,范围是0-s.length()
#include <iostream>
#include <string>
using namespace std;
int main(){
string s1, s2, s3;
s1 = s2 = "1234567890";
s3 = "aaa";
s1.insert(5, s3);
cout<< s1 <<endl;
s2.insert(5, "bbb");
cout<< s2 <<endl;
return 0;
}
//s1="12345aaa7890"
//s2="12345bbb7890"
二. 删除字符串
erase() 函数可以删除 string 中的一个子字符串
string& erase (size_t pos = 0, size_t len = npos);
//pos的范围为0-s.length()
//pos表示要删除的子字符串的起始下标,len 表示要删除子字符串的长度。如果不指明 len 的话,那么直接删除从 pos 到字符串结束处的所有字符(此时 len = str.length - pos)
//如果 pos 越界,会抛出异常;
//如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s1, s2, s3;
s1 = s2 = s3 = "1234567890";
s2.erase(5);
s3.erase(5, 3);
cout<< s1 <<endl;
cout<< s2 <<endl;
cout<< s3 <<endl;
return 0;
}
s1=1234567890
s2=12345
s3=1234590
三. 提取子字符串
substr() 函数用于从 string 字符串中提取子字符串
string substr (size_t pos = 0, size_t len = npos) const;
//pos 为要提取的子字符串的起始下标,len 为要提取的子字符串的长度。
//如果 pos 越界,会抛出异常;
//如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。
string s = "abcdefg";
string a = s.substr(0, 2);
//a="ab"
四. 字符串查找
string 类提供了几个与字符串查找有关的函数
1) find() 函数
find() 函数用于在 string 字符串中查找子字符串出现的位置
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
//第一个参数为待查找的子字符串,它可以是 string 字符串,也可以是C风格的字符串。第二个参数为开始查找的位置(下标);如果不指明,则从第0个字符开始查找。
//static const size_t npos = -1;即常量npos定义的值为-1. 但又因为npos 的类型size_t是无符号整数类型,所以npos实际上是一个正数,并且是size_t类型的最大值。
2) rfind() 函数
从后向前查找字符或者子字符串第一次出现的位置。
string s="abababa";
string a="aba";
s.rfind(a,4);//返回4
此时逆向查找,从下标4开始查找,此时直接匹配,注意,返回的不是2,而是4,
如果匹配不成功,则如下图,返回2
3) find_first_of() 函数
find_first_of() 函数用于查找子字符串和字符串共同具有的字符在字符串中首次出现的位置
#include <algorithm>
size_t find_first_of ( const string& str, size_t pos = 0 ) const;
//从pos位置开始查找共有的子字符串
五、字符串替换
//用str替换指定字符串从起始位置pos开始长度为len的字符
string& replace (size_t pos, size_t len, const string& str);
string a="abcd abcd";
a=a.replace(0,a.length(),"aaa");
//用str替换 迭代器起始位置 和 结束位置 的字符
string& replace (const_iterator i1, const_iterator i2, const string& str);
string a="abcd abcd";
a=a.replace(a.begin(),a.end(),"aaa");
//用substr的指定子串(给定起始位置和长度)替换从指定位置上的字符串
string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);
string a="abcd abcd";
string b="abcdefg";
a=a.replace(0,a.length(),b,1,2);