常用函数说明:
定义:string str="abcd";
输出:循环 printf("%c",str[i]);
可以使用迭代器:
for(string::iterator it=str.begin();it!=str.end();it++){
printf("%c",*it);
}
读入和输出整个字符串只能用cin和cout
拼接string: str2=str+str1; str1+=str;
比较:两个string类型可以直接使用==,!=,<,<=,>,>=比较大小,比较规则是字典序
字符数:length()/size() 返回string的长度,即存放的字符数
插入:
(1)insert(pos,string) 在pos号位置插入字符串string str.insert(2,str1);//在str[2]处插入str1
(2)inster(it,it2,it3) it原字符串,要插入字符的首尾 s1.insert(s1.begin()+1,str1.begin(),str1.end()) ;
删除:erase 删除单个元素 删除区间元素
(1)s1.erase(s1.begin()+2);
(2)s1.erase(s1.begin()+2,s1.end()-1);
(3)s1.erase(pos,length)函数 s1.erase(1,2);
截取子串:substr(pos,len)返回从pos位开始、长度为len的子串 ss.substr(0,5)
string::npos 常数,本身为-1,但由于unsigned_int类型,可以看做此类型的最大值。
string::npos作为find函数失配时的返回值
寻找子串:ss.find(ss1)返回子串在原串第一次出现的位置
替换:ss.replace(pos,len,str)str从pos号位开始,长度为len的子串替换为str t.replace(10,4,t1)
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
string str,str1,str2,str3;
str="abcd";
printf("str=:");
for(int i=0;i<str.length();i++){
printf("%c",str[i]);
}
printf("\n");
//用c_str将string类型转化为字符数组输出
printf("str.c_str()函数:str=%s\n",str.c_str());
//读入和输出整个字符串只能用cin和cout
//有时函数以迭代器为参数
//string::iterator it;
printf("使用迭代器访问:str=");
for(string::iterator it=str.begin();it!=str.end();it++){
printf("%c",*it);
}
printf("\n");
cin>>str1;
cout<<"输出str="<<str1<<endl;
//拼接string
str2=str+str1;//有顺序
str3=str1+str;
str1+=str;
cout<<"str1+=str: "<<str1<<endl;
cout<<"str2=str+str1: "<<str2<<endl;
cout<<"str3=str1+str: "<<str3<<endl;
//两个string类型可以直接使用==,!=,<,<=,>,>=比较大小,比较规则是字典序
string s1="aa",s2="aaa",s3="abc",s4="xyz";
cout<<"s1= "<<s1<<endl;
if(s1<s2) printf("OK1!\n");
if(s1!=s3) printf("OK2!\n");
if(s4>=s3) printf("OK3!\n");
//length()/size() 返回string的长度,即存放的字符数
printf("str存放的字符数:%d %d\n",str.length(),str.size());
//插入 insert(pos,string) 在pos号位置插入字符串string
str.insert(2,str1);//在str[2]处插入str1
cout<<"str.inster(2,str1):str="<<str<<endl;
//inster(it,it2,it3)it原字符串,要插入字符的首尾
//s1.begin()+1 一定不能越界
s1.insert(s1.begin()+1,str1.begin(),str1.end()) ;
cout<<"s1="<<s1<<endl;
//erase 删除单个元素 删除区间元素
s1.erase(s1.begin()+2);
cout<<"s1.erase(s1.begin()+2)后:s1= "<<s1<<endl;
s1.erase(s1.begin()+2,s1.end()-1);
cout<<"erase(s1.begin()+2,s1.end()-1)后:s1="<<s1<<endl;
s1.erase(1,2);
cout<<"使用s1.erase(pos,length)函数:s1="<<s1<<endl;
string ss="Thank you for your smile.";
cout<<"ss="<<ss<<endl;
//substr(pos,len)返回从pos位开始、长度为len的子串
cout<<"substr(0,5):"<<ss.substr(0,5)<<endl;
cout<<"substr(6,3):"<<ss.substr(6,3)<<endl;
cout<<"substr(10,3):"<<ss.substr(10,3)<<endl;
cout<<"substr(14,4):"<<ss.substr(14,4)<<endl;
cout<<"substr(19,5):"<<ss.substr(19,5)<<endl;
/*string::npos 常数,本身为-1,但由于unsigned_int类型,可以看做此类型的最大值。
string::npos作为find函数失配时的返回值
*/
if(string::npos==-1){
cout<<"string::npos==-1 is ture."<<endl;
}
if(string::npos==4294967295){
cout<<"string::npos==4294967295 is ture."<<endl;
}
//寻找子串,返回子串在原串第一次出现的位置
string ss1="you";
printf("you在ss中第一次出现的位置:%d\n",ss.find(ss1));
//法二: ss.find(ss1,pos) 从pos的位置开始查找
printf("you在ss中第一次出现的位置:%d\n",ss.find(ss1,7));
//ss.replace(pos,len,str) 把str从pos号位开始,长度为len的子串替换为str
string t="Maybe you will turn around.";
string t1="will not";
string t2="surely";
cout<<t.replace(10,4,t1)<<endl;
cout<<t.replace(t.begin(),t.begin()+5,t2)<<endl;
return 0;
}