目录
[字符串和int 值的转换。](#字符串和int 值的转换。)
string的概念
string是c++专门创建的字符串类型,为了方便操作字符串。
string中很多的方法。
string的基本操作
首先要包含头文件string.
创建
有初始化的创建,它的末尾不以'\0'为结尾。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="hello world";
//string a("hello world");
cout<<a;
return 0;
}

string可以直接赋值
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a;
string b("hello world");
a=b;
cout<<a;
return 0;
}

输入
cin输入,不能输入空格
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a;
cin>>a;
cout<<a;
return 0;
}
getline是c++标准函数,读取一行文本存储为字符。
istream&getline(istream& is,string&str);遇到'\n'停止。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a;
getline(cin,a);
cout<<a;
return 0;
}

istream&getline(istream& is,string&str,char delim);直到遇到delim字符停止
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a;
getline(cin,a,'m');//读到m停止
cout<<a;
return 0;
}

获取长度
size(),string有很多函数,用 . 使用
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string b;
string a="abcd";
string c="abcdefg";
string d="j k l l l";
cout<<a.size()<<endl;
cout<<b.size()<<endl;
cout<<c.size()<<endl;
cout<<d.size()<<endl;
return 0;
}

string的数据也有下标和正常创建的字符数组一样从0开始。
迭代器
用来遍历容器元素。
iterator类似指针,数组下标。
需要*解引用。
begin()和end()
begin()指向第一个位置,end()指向最后的下一个位置,不存在于字符串。
可以比较大小,加减。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="hello world";
string::iterator it1=a.begin();
string::iterator it2=a.end();
if(it1<it2)
cout<<"<"<<endl;
else
cout<<">"<<endl;
return 0;
}

可以通过*解引用,输出存储的字符。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="hello world";
string::iterator it1=a.begin();
string::iterator it2=a.end();
cout<<*it1<<endl;//[0]
it1++;
cout<<*it1<<endl;//[1]
it1--;
cout<<*it1<<endl;//[0]
return 0;
}

使用迭代器遍历。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="abcdef";
string::iterator it1=a.begin();
string::iterator it2=a.end();
for (string::iterator i = a.begin(); i != a.end(); ++i) {
cout << *i;
}
cout<<endl;
for(auto i=it2-1;i>=it1;--i){
cout<<*i;
}
return 0;
}

还有反向迭代器,reverse_iterator 类型的rbegin(),rend()刚好相反。

尾插函数
a.push_back();在字符串尾部插入字符
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="abcdef";
cout<<a<<endl;
a.push_back('g');
cout<<a<<endl;
return 0;
}

+=和+运算

也可以头部拼接。

尾删pop_back()

空的情况下删除会报错。
insert()插入
a.insert(pos , str),在a字符串中的pos位置前插入,str字符串。str可以是string类型的内容,可以是字符串如下图。
a.insert(pos,n,str)插入n个str的字符到pos前。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="abcdef";
cout<<a<<endl;
a.insert(3,"6");
cout<<a<<endl;
return 0;
}

find查找
a.find()返回第一次出现的位置。它的返回值是size_t,相当于下标
a.find(str,位置(默认0))
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="abcdef abc def l g k";
string b="de";
string c="l";
size_t t=a.find(b);
cout<<t<<endl;
cout<<a.find(b,t+1)<<endl;
return 0;
}

a.find(char*,size_t pos);
可以查找c风格的字符串。
a.find(str,size_t pos ,n)a字符串中查找str前n给字符

也可以找字符。str
找不到会放回-1;无符号整型的-1。2^32-1;
substr()
a.substr(pos,len=npos);pos截取的开始,npos截取的长度。pos默认为0,npos默认到字符串末尾
的长度。
用于截取a字符串pos位置开始n个的字符。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="abcdefghi";
string b=a.substr(3,3);
string c=a.substr(3);
cout<<b<<endl;
cout<<c<<endl;
return 0;
}

关系运算
==,至少有一个str的字符才可以比较,比较的ascii值对应位置。
cpp
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="abcdefghi";
string b="abcdefghi";
if(a==b)
cout<<"=="<<endl;
string c="abcdefgh";
if(a!=c)
cout<<"!="<<endl;
string d="b";
if(a<d)
cout<<"<"<<endl;
string e="aa";
if(a>e)
cout<<">"<<endl;
return 0;
}

字符串和int 值的转换。
stoi/stol,stol是int ,stol是long int。
int stoi(str,size_t* idx=0,int base=0)
long stol(str,size_t* idx=0,int base=0)
str是string类型的字符串。
idx是一个指针,从idx位置开始到第一个无法匹配的下标返回
如"123q"返回q的位置
base表示被解析的数字的进制,
2表示被解析的数字当作2进制数字,转化为10进制。
0是自动推到如0x是16,0是8;
#include <iostream>
#include<string>
using namespace std;
int main() {
string a="123p";
size_t t=0;
int b=stoi(a,&t,10);
int c=stoi(a,&t,8);
cout<<b<<endl;
cout<<c<<endl;
return 0;
}

stod转化为double,stof转化为float
stod(str,size_t* idx);只有10进制。
stof(str,size_t* idx);

to_string
把数字转换为字符串。

反转字符串
reverse要包含头文件algorithm.
reverse(首元素的地址,反转范围末尾的下一个元素)。
cpp
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
string str;
cin>>str;
reverse(str.begin(),str.end());
cout<<str;
return 0;
}

