使用时引入头文件#include<string>。
一、基础概念
本质:
String的本质是一个类。
String与char*区别:
- char*是一个指针
- String是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器
特点:
String管理char*所分配的内存,无需担心复制越界和取值越界等,由类内部进行负责
1.1string的构造函数
string构造函数原型为:
string();//创建一个空的字符串,String str
string(const char *s);///使用字符串s初始化
string(const string& str);///使用一个string对象初始化另一个String对象
string(int n,char c);///使用n个字符c初始化 string str(4,'c')
二、初始化
有两种方式,使用等号的是拷贝初始化,不使用等号的是直接初始化
1)string str1="hello world";
2)string str2("hello world");
3)string str3=str1;
4)string str4(str2);
5)string str5(10,'a');
cin>>str;//输入字符串
1) str.push_back('s');//添加一个字符
2) str.pop_back();//删除一个字符
3) str='0'+str;//字符串前面加0
4) str=“000000”+str;//字符串前面加一串0
5) str=str+'0';//字符串后面加0
三、常用操作
1)获取长度
str.length();
str.size();//均可以,不包括'\0'
2)反转字符串
reverse(str.begin(),str.end());
3)查找,判断子串
查找字符串第一次出现的位置
str.find(str1);//返回的是str1在str中第一次出先的位置,如果失败,返回-1或string::npos(string::npos的默认值也是-1)
函数原型如下:
int find(const string& str,int pos=0) const;///查找当前字符串中str第一次出现的位置
int find(const char* s,int pos=0)const;///查找s在当前字符串第一次出现的位置,默认从0开始
int find(const char* s,int pos,int n) const;///从pos位置开始查收字符串s的前n个字符
int find(const char c,int pos=0);///查找字符c第一次出现的位置
如下:
string a="abc";
string b="123";
string::size_type idx;
idx=a.find(b);
if(idx==string::npos)
cout<<"not found"<<endl;
查找字符串最后一次出现的位置。函数原型为:
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最后一次出现的位置
4)数值转化
string str=to_string(val);//把val转化成string
int num=stoi(str,p,b);//把字符串s从p处开始转化为b进制的int
long num=stol(str,p,b);//把字符串s从p处开始转化为b进制的long
unsigned long num=stoul(str,p,b);//把字符串s从p处开始转化为b进制的unsigned long
long long num=stoll(s,p,b);//把字符串s从p处开始转化为b进制的long long
unsigned long long num=stoull(s,p,b);//把字符串s从p处开始转化为b进制的unsigned long long
flaot num=stof(s,p);//把字符串s从p处开始转为float
double num=stod(s,p);//把字符串从p处开始转化为double
long double num=stold(s,p);//把字符串s从p处开始转为long double
5)复制子串
string str=s.substr(i,j);//从字符串s的第i位开始长度为j的字符串复制给str
string str=s.substr(i);//将字符串s从i开始到结束复制给str
6)判断空
s.empty();//判断字符串是否为空
7)删除和清空
s.clear();//删除全部字符
s.erase(2,3);//从位置2开始删除3个字符
8)字符串比较大小
字符串比较按照字符的ASCII码进行比较,=返回0;>返回1;<返回-1。函数原型为:
int compare(const string &s)const;///与字符串s比较
int compare(const char *s) cosnt;///与字符串s比较
9)替换
替换的函数原型如下:
string& replace(int pos,int n,const string& str);///从当前字符串pos开始的n个字符替换为str
string& replace(int pos,int n,const char* s);///替换从pos开始的n个字符为字符串s
10)调整字符串大小
s.resize(num);//重新调整字符串的大小为count
如s="abcd"
s.resize(2);//字符串变短,现在只有2个字符
s.resize(6,'b');//字符串变长,则需要为多余的赋值,此时字符串为abcdbb
11)字符串赋值操作
赋值的函数原型
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赋给当前字符串
12)字符串拼接
在字符串末尾追加字符串。函数原型为:
string& operator+=(const char *str);///重载+=操作符,字符串后拼接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);///把字符串s追加到当前字符串末尾
string& append(const string &s,int pos,int n);//字符串s从pos开始的n个字符追加到当前字符串末尾
13)字符串存取
String中单个字符存取方式有2种:
char& operator[](int n);///通过[]方式取字符
char& at(int n);///通过at方法取字符
示例为:
string str="hello world";
str[0]='x'; //此时字符串为xello world
str.at[1]='w'; //此时字符串为xwllo world
14)字符串插入
对字符串进行插入和删除操作的函数原型为:
string& insert(int pos,const char* s);///插入字符串
string& insert(int pos,const string& str);//插入字符串
string& insert(int pos,int n,char c);//在指定位置插入n个字符c