string头文件详解

头文件

#include<string>
using namespace std;

访问字符串

string str="abcd";
for(int i=0;i<str.length();i++){
	cout<<str[i];	
}

输入字符串

string str;
cin>>str;

输出字符串

string str;
cout<<str;

printf("%s\n,str.c_str());

string迭代器

string::iterator it;//定义迭代器
string str="abcdefg";
for(it=str.begin()+3;it!=str.end();it++){
	printf("%c",*it);//输出defg
}

string的运算
加法运算

string str1="abc",str2="def";
str1=str1+str2;
cout<<str1;//输出abcdef

关系运算
按照字典序来比较两个string类型的大小

string str1="ii",str2="iii",str3="ide";
if(str1<str2&&str2>str3){
	cout<<"OK"<<endl;//输出OK
}

常用函数
1)length()和size()
用于返回字符串长度
时间复杂度为O(1)

2)clear()
用于清空string中所有元素
时间复杂度为O(1)

string str="abcd";
cout<<str.size<<endl;//输出4
str.clear();
cout<<str.length<<endl;//输出0

3)substr()
substr(temp,length)返回从temp位置开始,长度为length的数组
时间复杂度为O(n)

string str="hello world";
cout<<str.substr(0,5)<<endl;//输出hello
cout<<str.substr(6,5)<<endl;//输出world

4)insert()
函数insert有多种写法,时间复杂度都为O(n)
1:insert(temp,str)
表示在temp的位置中插入字符串str

string str1="abcdefg",str2="xyz";
str1.insert(3,str2);//把str2插入str1的x和d之间
cout<<str1<<endl;//输出abcxyzefg

2:insert(it1,it2,it3)
其中it1为原字符的欲插入位置,it2和it3为待插入字符串的首位迭代器(左闭右开区间)

string str1="abcdef",str2="xyz";
str1.insert(str1.begin()+3,str2.begin(),str2.end());//把str2插入str1的c和d之间
cout<<str1<<endl;//输出abcxyzdef

5)erase()
用于删除单个或一个区间内的所有元素,时间复杂度为O(n)

1:删除单个元素
erase(it),it为删除元素的迭代器

string str="abcdefg";
str.erase(str.begin()+4);
cout<<str<<endl;//输出abcdfg

2:删除一个区间的元素
1~ erase(first,last)
first是区间的起始迭代器,last是区间的末尾迭代器的下一个地址,是左闭又开的区间,即 [first,last)
2~ erase(temp,length)
temp是需要删除的字符串的起始位置,length是要删除的字符个数

string str="str"abcdefghijklmn";
str.erase(8,7);
cout<<str<<endl;//输出abcdefgh
str.erase(str.begin()+2,str.end()-1);
cout<<str<<endl;//输出abh

6)find()
str.find(str1),当str1是str的子字符串时,返回其在str中第一次出现的位置,否则返回string::npos .string::npos是一个常数,本身的值为-1,但由于是unsigned int类型,因此也认为是unsigned int类型的最大值

string str="abc",str1="abcdefgabc",str2="defgh";
cout<<str1.find(str)<<endl;
cout<<str1.find(str,4)<<endl;
if(str2.find(str)!=string::npos){
	cout<<str2.find(str)<<endl;
}
else{
	cout<<"not"<<endl;
}

最终输出结果为:
0
7
not

7)replace()
str.replace(temp,length,str2)
表示把str从temp位置开始,长度为length的子串替换为str2
也可以写成str.replace(it1,it2,str2),表示把it1~it2范围内(左闭右开区间)的字串替换为str2,时间复杂度是O(str.length)

string str="I will always be with you.";
string str1="bu sure to";
string str2="no matter what."
cout<<str.replace(7,6,str1)<<endl;
cout<<str.replace(str.end()-3,str.end(),str2)<<endl;

输出结果:
I will be sure to be with you.
I will always be with you no matter what.

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐