string用法小结

定义

string只能用cin、cout,除非强制转换

string s="abc";

访问

通过下标

#include<cstdio>
#include<iostream>
using namespace std;
string s="abc";
int main(){
	int len=s.length();
	for(int i=0;i<len;i++)
	cout<<s[i]<<" ";
}

通过迭代器访问

一般通过下标访问即可,但有些函数要用到insert()和erase()则要求以迭代器为参数,因此要学习。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abc";
int main(){
	string::iterator it;
	for(it=s.begin();it!=s.end();it++)
	cout<<*it;
}

常用函数

operator+=

直接将两个string拼接

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abc",s1="bcd";
int main(){
	s+=s1;
	cout<<s<<endl;
}

compare operator

两个字符串可以比较大小,比较规则是字典序

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abc",s1="bcd";
int main(){
	if(s>s1)
	cout<<s<<endl;
	else cout<<s1<<endl;
}

length()/size()

返回string的长度。时间复杂度为O(1)

insert()

时间复杂度O(N)
insert(pos,str2)//在pos的位置上插入字符串

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abc",s1="bcd";
int main(){
	s.insert(2,s1);
	cout<<s<<endl;
}

insert(it,it2,it3),it为原字符串欲插入的位置,it2、it3为待插入字符串的首尾迭代器

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abc",s1="bcdefg";
int main(){
	s.insert(s.begin()+1,s1.begin()+2,s1.end());
	cout<<s<<endl;
}

erase()

删除单个元素、删除区间内所有元素。O(N)
str.erase(it)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcdef",s1="bcdefg";
int main(){
	s.erase(s.begin()+4);
	cout<<s<<endl;
}

删除区间内
str.erase(first,last)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcdef",s1="bcdefg";
int main(){
	s.erase(s.begin()+2,s.begin()+4);
	cout<<s<<endl;
}

str.earse(pos,length),pos是删除起始位置,length删除字符的个数

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcdef",s1="bcdefg";
int main(){
	s.erase(2,2);
	cout<<s<<endl;
}

clear()

清空数据,O(1)

substr()

substr(pos,len)返回从pos号位开始、长度为len的子串,时间复杂度为O(len).

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcdef",s1="bcdefg";
int main(){
	cout<<s.substr(0,3)<<endl;
}

string::npos

是一个常数,其本身值为-1.find函数失配时的返回值

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcbcdef",s1="bc";
int main(){
	if(string::npos==-1){
		cout<<"Yes"<<endl;
	}
	else cout<<"No"<<endl;
}

find()

str.find(str2),当str2是str的子串时,返回其中在str中第一次出现的位置;如果str2不是str的子串,返回string::npos
str.find(str2,pos),从str的pos号位置开始匹配str2,返回值与上相同
O(nm)n为str长度,m为str2的长度

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcbcdef",s1="bc";
int main(){
	cout<<s.find(s1)<<endl;
	cout<<s.find(s1,3)<<endl;
}
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcbcdef",s1="bc";
int main(){
	if(s.find(s1,5)==-1){
		cout<<"No find"<<endl;
	}
	else cout<<s.find(s1,5)<<endl;
}

replace()

str.replace(pos,len,str2)//从pos位置开始,长度为len的子串替换成str2
str.replace(it1,it2,str2)//把str的迭代器[it1,it2)范围的子串替换成str2
O(s.length())

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s="abcdef",s1="bcdefg";
int main(){
	cout<<s.replace(0,1,s1)<<endl;
	cout<<s.replace(s.begin(),s.end(),s1)<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值