目录
一、定义
//头文件
#include<string>
string a="main";
PS:只使用string类型的变量不用写,string类型是基本类型。只有用到string的库函数的时候,才需要写。
二、入门
1.拼接
a+="vix";
//C++的string类型还可以拼接换行符
a+='\n';
2.比较
(1)相等
使用==判断,c++判断的是内容是否一致,而Java判断的是管理权限是否一致。Java使用equal()判断内容是否一致。
//可以直接使用==来判断内容是否相等
string a="main";
string b="main";
bool flag=a==b;
cout<<flag<<endl;;
//1
string c="mai";
c+="n";
bool flag2=a==c;
cout<<flag2<<endl;
//1
/*java*/
String a="main";
String b="main";
System.out.println(a==b);
//true
String c="mai";
c+="n";
System.out.println(a==c);
//false
也利用函数compare()。若要比较string s1和s2则写为:s1.compare(s2),若返回值为0,则两者相等。
(2)>和<
使用>和<时,是逐个比较字符
//当a是b的真子串时,a<b为1,
string a="ccc";
string b="cccc";
bool flag1=a<b;
cout<<flag1<<endl;
//1
//逐个比较字符,比较ascii码大的为1
string c="ccc";
string d="bccc";
bool flag2=c>d;
cout<<flag2<<endl;
//1
3.函数传参
string字符串像是int类型,不是像char字符串那样传递的是地址,想要通过函数改变值还得用&符引用。
void vix(string a)
{
a="vix";
cout<<"f::"<<a<<endl;
}
void vex(string &a)
{
a="vex";
cout<<"vex::"<<a<<endl;
}
int main()
{
string a="main";
vix(a);
cout<<"main1::"<<a<<endl;
vex(a);
cout<<"main2::"<<a<<endl;
return 0;
}
/*
f::vix
main1::main
vex::vex
main2::vex
*/
4.迭代器iterator
//使用迭代器输出头字符
string a="main";
string::iterator it=a.begin();
cout<<*it;
//m
//使用迭代器输出尾字符,注意尾字符不是end,而是end--
string::iterator it2=a.end();
it2--;
cout<<*it2;
//n
//使用迭代器输出每个字符
string a="main";
for(string::iterator it =a.begin();it!=a.end();it++)
{
cout<<*it;
}
//main
三、函数
1.substr():获得子串
string a="main";
cout<<a.substr(0,2)<<endl;
//ma
//从起始下标开始不到结束下标
2.replace():替换部分
cout<<a.replace(0,2,"thank")<<endl;
//thankin
//替换的串不必与它被替换的串一样长
3.length():获取长度
不计算'\0' 。
PS:这个函数不需要写#include<string>。
string a="main";
cout<<a.length();
//4
4.reverse():倒置
reverse()是#include<algorithm>里的
string a="main";
reverse(a.begin(),a.end());
cout<<a;
//niam
5.c_str():转char字符串
不推荐用法:当string变量的值改变时,char字符串的内容也可能被改变。
PS:大部分编译结果如下被改变了,只有一小部分编译结果不变
string a="main";
const char *str1=a.c_str();
cout<<a<<" "<<str1<<endl;;
a="sunshine";
cout<<a<<" "<<str1<<endl;
/*
main main
sunshine sunshine
*/
推荐用法:手动分配空间
PS:strcpy()在#include<cstring>头文件里
string b="honey";
char *str2=new char[b.length()];
strcpy(str2,b.c_str());
cout<<b<<" "<<str2<<endl;;
b="sunshine";
cout<<b<<" "<<str2<<endl;
/*
honey honey
sunshine honey
*/
6.查找
string a="abc"
a的下标是0
ps:以下函数,如无指定位置pos,那就根据其函数意义从首或从尾查找。
(1)find()
char字符查找
string a = "sunshine";
//默认从位置0(即第1个字符)开始查找
cout<<a.find('i')<<endl;
//5
//从位置2(b,包括位置2)开始,查找a,返回首次匹配的位置
cout<<a.find('i',2)<<endl;
//5
//找不到
if(a.find('o')==-1) cout<<a.find('o')<<endl;
//18446744073709551615
//原因是计算机中-1和18446744073709551615都表示为64个1(二进制)
子串查找
string a = "sunshine";
string b = "in";
//在a从位置2(b)开始匹配,返回第一次成功匹配时匹配的串(in)的首字符在a中的位置,失败返回-1
cout<<a.find(b,2)<<endl;
//5
//取insight得前2个字符(in)参与匹配,相当于a.find("in", 2)
cout<<a.find("insight",2,2)<<endl;
//5
(2)rfind()
string a = "sunshine";
//从指定位置起向前查找,直到串首
cout<<a.rfind("in",7)<<endl;
//5
(3)find_first_of()
string a = "abcdefg";
//在源串中从位置pos起往后查找,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;
//若匹配失败,返回-1
cout<<a.find_first_of("df",2)<<endl;
//3
(4)find_last_of()
string a = "abcdefg";
//与find_first_of函数相似,只不过查找顺序是从指定位置向前
cout<<a.find_last_of("df")<<endl;
//5
(5)find_first_not_of()
string a = "abcfabc";
//在源串中从位置pos开始往后查找,只要在源串遇到一个字符,与目标串中的任意字符都不相同,就停止查找,返回该字符在源串中的位置;
//若遍历完整个源串,都找不到满足条件的字符,则返回-1
cout<<a.find_first_not_of("abc")<<endl;
//3
(6)find_last_not_of()
string a = "abcfabccc";
//find_last_not_of与find_first_not_of相似,只不过查找顺序是从指定位置向前
cout<<a.find_last_not_of("abc",8)<<endl;
//3