C语言中一般用字符数组char str[]存放字符串,但使用字符数组有时会显得操作麻烦。C++在STL中加入了string类型,对字符串常用的需求功能进行封装,使得操作更加方便,且不易出错。
使用string需于代码头部添加#include<string>
,并且随后加上一句:using namespace std;
即可。
仅定义:string str;
定义并初始化:string str = "abcd";
在有些函数如insert()和erase()则要求迭代器为参数,因此容器此时需要通过迭代器访问。
定义:string::iterator it;
代码:
#include<stdio.h>
#include<string>
using namespace std;
int main(){
//通过下标访问元素(一次读入输出单个字符)
string str1 = "abcd";
for(int i = 0; i < str.length(); i++){
printf("%c",str[i]);//输出"abcd"
}
//通过下标访问元素(一次读入输出整个字符串)
string str2;
cin>>str2;
cout<<str2;
//通过下标访问元素(一次读入输出整个字符串)
//用c_str()将string类型转换为字符数组进行输出
printf("%s\n",str1.c_str());
//通过迭代器访问
for(string::iterator it = str.begin();it != str.end(); it++){
printf("%c",*it);
//只有vector和string中,才允许使用迭代器加上整数这种写法,如str.begin()+3
}
//拼接字符串
string str4 = "abc", str5;
str5 = str1 + str4;
str1 += str4;//将str4拼接到str1上
cout<<str5<<endl;//输出"abcdabc"
cout<<str1<<endl;//输出"abcdabc"
//比较字符串
//可以直接使用==、!=、<、<=、>、>=按字典序比较大小。
if(str1 == str5) printf("ok\n");
//返回字符串长度,时间复杂度为O(1)
printf("%d %d\n",str5.length(), str5.size());
//插入字符,时间复杂度为O(N)
//insert(pos,string),在pos号位置插入字符串string
str5.insert(3,str4);//往str[3]处插入abc,结果为"abcabcdabc"
str5.insert(3,"abc");//同上
//insert(it,it2,it3)
//it为原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器,用来表示串[it2,it3)将插在it的位置上
//在str5的3号位(即c和a之间)插入str4
str5.insert(str.begin() + 3, str4.begin(), str4.end());//结果为"abcabcabcdabc"
//insert(pos,string),在pos号位置插入字符串string
//删除单个元素
str5.erase(str5.begin() + 4);//参数为迭代器,删除4号位,即"b",此时str5为"abcacabcdabc"
//删除一个区间内的所有元素
//str.erase(first,last)
//删除在[str5.begin()+2,str5.end()-1)内的元素,即"cacabcdab"
str5.erase(str5.begin()+2,str5.end()-1);//此时str5为"abc"
//str.erase(pos,length)
str1.erase(3,2);//删除从3号位开始的2个字符,即"ab",此时str1为"abccd"
//清空元素
str5.clear();
//返回子串:substr(pos,len),时间复杂度为O(len)
cout<<str1.substr(1,3)<<endl;//返回1号位开始,长度为3的子串,即"bcc"
//find函数失配时的返回值:string::npos(unsigned_int类型的最大值)
if(string::npos == -1){
cout<<"-1 is true"<<endl;
}
if(string::npos == 4294967295){
cout<<"4294967295 is also true"<<endl;
}
//查找子串:find(),时间复杂度为O(mn)
string str6 = "Thank you for your smile.";
string str7 = "you";
string str8 = "our";
if(str.find(str7) != string::npos){
cout<<str6.find(str7)<<endl;
//输出6,返回当str7是str6的子串时str7在str6首次出现的位置
}
if(str.find(str7,7) != string::npos){
cout<<str6.find(str7,7)<<endl;
//输出14,返回从str6的7号位开始匹配str7,str7在str6的7号位后首次出现的位置
}
if(str.find(str8) != string::npos){
cout<<str6.find(str8)<<endl;
}else{
cout<<"There is no position!"<<endl;
//输出"There is no position!"
}
//子串替换:replace(),时间复杂度为O(str.length())
//str6.repalce(pos,len,str2)把str从pos号位开始、长度为len的子串替换为str2
cout << str6.replace(14, 4, str8) << endl;
//str.repalce(it1,it2,str2)把str的迭代器[it1,it2)范围的的子串替换为str2
cout << str6.replace(str8.begin(), str8.begin()+2, str8) << endl;
}
版权所有:可定博客 © WNAG.COM.CN
本文链接:https://cloud.tencent.com/developer/article/1616895
特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~