String常见用法
1.string中内容的访问
通过下标
一般来说,可以直接像字符数组那样去访问string;
示例如下:
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcd";
for(int i=0;i<str.length();i++){
printf("%c",str[i]);
}
return 0;
}
如果要读入和输出整个字符串,则只能用cin和cout;
示例如下:
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str;
getline(cin,str);//获取输入的字符串;
cout<<str;
return 0;
}
也可以用c_str()将string类型转换为字符数组进行。
示例如下:
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcd";
printf("%s/n",str.c_str());
return 0;
}
通过迭代器访问
示例如下:
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcd";
for(string::iterator it = str.begin();it!=str.end();it++){
printf("%c",*it);//输出abcd
}
return 0;
}
3.string常用函数
(1)operator+=
这是string的加法,可以将两个string直接拼接起来。
示例如下:
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str1 = "abc";
string str2 = "cde";
string str3;
str3 = str1+str2;//str1和str2连接起来
str1 += str2; //将str2连接到str1后;
cout<<str1<<endl;//输出abccde;
cout<<str3<<endl;//输出abccde;
return 0;
}
(2) compare operator
两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序。
示例如下:
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str1 = "aa";
string str2 = "aaa";
string str3 = "abc";
string str4 = "xyz";
if(str1 < str2){
printf("ok1\n");//如果str1字典序小于str2,输出ok1;
}
if(st1 != str3){
printf("ok2\n");//如果str1和str3不等,输出ok2;
}
if(str4 >= str3){
printf("ok3\n");//如果str4字典序大于str3,输出ok3;
}
return 0;
}
(3)和(4) insert() 和 length() / size()
length()返回string长度,size和length基本一样。
insert(pos,string)在pos号位置插入字符串string。
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str1 = "abcxyz";
string str2 = "opq";
cout<<str1.length()<<" "<<str1.size()<<endl;// 输出 6 6
str1.insert(3,str2);// 往str[3] 的位置上插入opq。
cout<<str1<<endl;
return 0;
}
insert(it,it2,it3),it为原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器,用来表示串[it2,it3]将被插在it的位置上。
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcxyz";
string str2 = "opq";
str.insert(str.begin()+3,str2.begin().str2.end());//在str[3]位置插入str2;
cout<<str<<endl;
return 0;
}
(5)erase()
删除单个元素
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcdefg";
str.erase(str.begin()+4);//删除4号位(即e);
cout<<str<<endl;
return 0;
}
删除一个区间内的元素
第一种方法
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcdefg";
str.erase(str.begin()+4,str.end()-1);//删除4号位到5号位(即ef);
cout<<str<<endl;
return 0;
}
第二种方法
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcdefg";
str.erase(3,2);//删除从3号位开始的两个字符(即de);
cout<<str<<endl;//输出abcfg;
return 0;
}
(6)clear()
清空string中的数据。
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "abcd";
str.clear();//清空str;
cout<<str.length()<<endl;//输出0;
return 0;
}
(7)substrate()
substr(pos,len)返回从pos号位开始、长度为len的子串。
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "Thank you for your smile.";
cout<<str.substr(0,5)<<endl;//输出Thank;
cout<<str.substr(14,4)<<endl;//输出your;
cout<<str.substr(19,5)<<endl;//输出smile;
return 0;
}
(8)string::npos和find()
string::npos是一个常数,其本身的值为-1,但由于是usigned_int类型,因此实际上也可以认为是usigned_int类型的最大值。string::npos用以作为find函数失配时的返回值。
str.find(str2),当str2是str的子串时,返回其第一次出现的位置;如果str2不是str的子串,则返回string::npos。
str.find(str2,pos),从str的pos位置开始匹配str2,返回值与上面相同。
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "Thank you for your smile.";
string str2 = "you";
string str3 = "me";
if(str.find(str2,7) != string::npos){
cout<<str.find(str2,7)<<endl;//输出14
}
if(str.find(str2) != string::npos){
cout<<str.find(str2)<<endl;//输出6
}
if(str.find(str3) != string::npos){
cout<<str.find(str3)<<endl;//没有找到;
}else{
cout<<"I know there is no position for me."<<endl;
}
return 0;
}
(9)replace()
str.replace(pos,len,str2)把str从pos位置开始,长度为len的子串替换为str2。
str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围的子串替换为str2.
示例如下:
#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
string str = "Maybe you will turn around.";
string str2 = "will not";
string str3 = "surely";
cout<<str.replace(10,4,str2)<<endl;//将will替换为str2;
cout<<str.replace(str.begin(),str.begin()+5,str3)<<endl;//将Maybe替换为surely;
return 0;
}
完结。