STL-string用法

来源:互联网 发布:淘宝店招图片怎么做 编辑:程序博客网 时间:2024/06/04 21:13

c++中自带的字符串类string在处理字符串的时候会比字符数组方便很多,而且可以直接与其他嵌套使用;头文件为#include<cstring>

1.创建对象和赋值

#include<bits/stdc++.h>using namespace std;int main(){string str;//创建一个字符串变量strstr="hello"; cout<<str<<endl;}
#include<bits/stdc++.h>using namespace std;int main(){string str1,str2;//我们来看一下覆盖赋值str1="hello,world";str2="nice";cout<<"str1:"<<str1<<endl<<"str2:"<<str2<<endl<<endl;str1=str2;cout<<"str1:"<<str1<<endl<<"str2:"<<str2<<endl;//覆盖赋值跟c语言中整形变量的覆盖赋值一样,会直接覆盖; }
2.字符串的连接和比较

连接在这里我们可以直接使用‘+’运算符;

#include<bits/stdc++.h>using namespace std;int main(){string str,str2;str="h";str=str+'e';//在尾部加一个字母e cout<<str<<endl;str=str+"llo";//在尾部加一个串llo cout<<str<<endl;str2=",world!";str=str+str2;//加另一个字符串 cout<<str<<endl;}

比较也可以直接用'>''<''=="

#include<bits/stdc++.h>using namespace std;int main(){string str1="abd",str2="abc";if(str1>str2){cout<<"str1>str2"<<endl;str2="abe";//更改str2的值使str1<str2}if(str1<str2){cout<<"str1<str2"<<endl;str2="abd";//更改str2的值使str1==str2}if(str1==str2){cout<<"str1==str2"<<endl;}return 0;} 


3.访问string对象的元素;

我们想访问字符串中的某个位置的字符的时候c语言的那种方式依旧可以用;

#include<bits/stdc++.h>using namespace std;int main(){string str="0123456789";cout<<str[5]<<endl;return 0;}

substr(int pos,int n);意思是从第pos位开始输出n个字符;可以访问其中某一段,这对汉字的输出起到了很大的便利,因为汉字占两个位置按上边的方法输出是不行的;

#include<bits/stdc++.h> using namespace std;int main(){string s="你好";cout<<"*"<<s[0]<<endl;//看一下按上边那种输出方式,输出的是什么 cout<<s.substr(0,2)<<endl;//第一个参数为第几位,第二个为输出几个字符;汉字两个 cout<<s.substr(2,2)<<endl;}
4.插入字符或字符串

insert()函数;插入到指定位置之前;(这个位置是迭代器位置,迭代器是什么我也不太理解)

#include<bits/stdc++.h>using namespace std;int main(){string str="12345";str.insert(1,"hello");//在1位置插入hello str.insert(str.begin(),'S');//这种只能插入一个字符;str.begin()返回开始位置的迭代器  str.insert(str.end(),5,'x');//在末尾插入5个x        str.end()返回结束位置的迭代器cout<<str<<endl;return 0;}
5.删除元素

erase()函数;删除某个字符或者一个区间的所有元素;

#include<bits/stdc++.h>using namespace std;int main(){string str="123zabc456";string::iterator it=str.begin();//定义迭代器变量,并且位置指在首元素,迭代器用法跟循环变量i差不多(我也不太明白直接用就行) str.erase(it+3);//删除第4个元素 因为it从0开始所以it+3就是第四个元素 cout<<str<<endl;str.erase(it+3,it+6);//删除[3,6)区间的元素 既删除第3,4,5元素 注意从0开始计数! cout<<str<<endl;return 0;}
6.替换字符或者字符串

replace()函数;

#include<bits/stdc++.h>using namespace std;int main(){string str="123456789";str.replace(2,3,"good");//从第2个开始,将连续的三个字符替换为good cout<<str<<endl; return 0;} 
7.搜索string对象的元素或者子串

find();这个函数有很多重载函数,用法也是多种多样;在这我只说常用的一种;

#include<bits/stdc++.h>using namespace std;int main(){string str="good bad";cout<<str.find('b')<<endl; //找到第一个字符b返回下标值cout<<str.find("bad")<<endl;//找到第一个bad字符串的返回开始位置下标值return 0;} 
8.string对象的长度和清空和判断是否为空

length()求长度;clear()清空;empty()判断是否为空;

#include<bits/stdc++.h>using namespace std;int main(){string str="123456";cout<<str.length()<<endl;//输出str长度cout<<str.empty()<<endl;//判断是否为空,为空返回1,不为空返回0 str.clear();//清空str cout<<str.empty()<<endl; return 0;} 

9.string和STL其他工具嵌套使用

(1)string作为vector的元素

#include<bits/stdc++.h>using namespace std;int main(){string str1="ABC",str2="XYZ";vector<string>v;v.push_back(str1);v.push_back(str2);cout<<v[0]<<endl<<v[1]<<endl;return 0;} 
(2)string排序
①可以用sort对单个string中的某一段进行排序;

#include<bits/stdc++.h>using namespace std;int main(){string str1="BDACEGF",str2="ABDECXYZ";sort(str1.begin(),str1.end());//对str1整个进行排序 cout<<str1<<endl;sort(str2.begin()+2,str2.begin()+5);//对str2的[2,5)区间进行排序 cout<<str2<<endl;return 0;} 

②对字符串数组排序

#include <bits/stdc++.h>using namespace std;int main(){string s[6];s[0] = "ABC";s[1] = "ABD";s[2] = "ABCD";s[3] = "BBC";s[4] = "ABC";s[5] = "aBC";sort(s,s + 6);//对这6个字符串按照字典序进行排序 for(int i = 0; i < 6; i++){cout << s[i] << endl;}return 0; }

10.字符串与数字的转换,stringstream的简单运用

字符串变为数字

#include <bits/stdc++.h>using namespace std;int main(){string s = "123";int a = 0;stringstream ss;ss<<s;ss>>a;cout << a << endl;return 0; }
数字变为字符串
#include <bits/stdc++.h>using namespace std;int main(){string s = "123";int b = 666;stringstream ss;ss << b;ss >> s;cout << s << endl;return 0; }


外加一个sscanf用法

#include<bits/stdc++.h> using namespace std;int main(){      char str[100];      //用法一:取指定长度的字符串      sscanf("12345","%4s",str);      printf("用法一\nstr = %s\n",str);        //用法二:格式化时间      int year,month,day,hour,minute,second;      sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);      printf("用法二\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second);        //用法三:读入字符串      sscanf("12345","%s",str);      printf("用法三\nstr = %s\n",str);        //用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)      sscanf("12534acc","%*d%s",str);      printf("用法四\nstr = %s\n",str);        //用法五:取到指定字符为止的字符串。如在下例中,取遇到'+'为止字符串。      sscanf("12345+acc","%[^+]",str);      printf("用法五\nstr = %s\n",str);        //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。      sscanf("12345+acc121","%[^a-z]",str);      printf("用法六\nstr = %s\n",str);      return 0;  }  


想了解更多大家可以去string用法总结,看一下大神的;

1 0
原创粉丝点击