C++的string类型入门

目录

一、定义

 二、入门

1.拼接

2.比较

(1)相等

(2)>和<

 3.函数传参

4.迭代器iterator

三、库函数

1.substr():获得子串

2.replace():替换部分

3.length():获取长度

4.reverse():倒置

 5.c_str():转char字符串

6.查找

(1)find()

(2)rfind()

(3)find_first_of()

(4)find_last_of()

(5)find_first_not_of()

(6)find_last_not_of()


一、定义

//头文件
#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

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值