C++STL之string
来源:互联网 发布:cnc串联程序软件 编辑:程序博客网 时间:2024/05/22 10:47
C++STL之string 常用函数测试示例
1.头文件
#include<string>using namespace std;
注意:string.h和cstring是对char* 类型处理的头文件
2.输入输出与赋值
#include <iostream>#include <string>using namespace std;int main (){ //可直接赋值 string s1; string s2="22222"; cout<<s1<<endl; cout<<s2<<endl; //可输入 cin>>s1; cout<<s1<<endl; //可重新输入 cin>>s2; cout<<s2<<endl; return 0;}
总结:string类有重载运算符>> <<,可直接用于输入输出。s=”123”等价于s.assign(“123”)
3.length(),size(),capasity(),max_size()
返回类型均为int
#include <iostream>#include <string>using namespace std;void Out(string s);int main (){ string s="01234"; Out(s); s="0123456"; Out(s); s="0123456789ABCD"; Out(s); s=""; Out(s); return 0;}void Out(string s){ cout<<"s="<<s<<endl; cout<<"s.size()="<<s.size()<<endl; cout<<"s.length()="<<s.length()<<endl; cout<<"s.max_size()="<<s.max_size()<<endl; cout<<"s.capacity()="<<s.capacity()<<endl; cout<<endl;}
总结: length(),size()函数功能一样,都是返回长度,capacity()是返回当前的容量,容量的扩充是根据字符串第一次被赋值后的长度决定的。max_size()则返回固定值。
4.clear(),empty()
#include <iostream>#include <string>using namespace std;void Out(string s);int main (){ string s="01234"; if(s.empty())cout<<"empty1"<<endl; s.clear(); if(s.empty())cout<<"empty2"<<endl; Out(s); return 0;}void Out(string s){ cout<<"s="<<s<<endl; cout<<"s.size()="<<s.size()<<endl; cout<<"s.length()="<<s.length()<<endl; cout<<"s.max_size()="<<s.max_size()<<endl; cout<<"s.capacity()="<<s.capacity()<<endl; cout<<endl;}
总结:s.empty()在s为空返回true,不为空返回false
s.clear()等同于s=”“
5.+,+=,==
#include <iostream>#include <string>using namespace std;int main (){ string s="01234"; s+="567"; s+='8'; string s1="99"; s+=s1; cout<<s<<endl; s="01234"; s1="01234"; if(s==s1)cout<<"equal"<<endl; else cout<<"not equal"<<endl; return 0;}
总结:string具有+,+=的多态重载,非常方便,同时可以用==来判断是否相等
6. [] 和 at
#include <iostream>#include <string>using namespace std;int main (){ string s="01234"; cout<<"s[4]="<<s[4]<<endl; cout<<"s.at(4)="<<s.at(4)<<endl; cout<<"s[5]="<<s[5]<<endl; cout<<"s.at(5)="<<s.at(5)<<endl; return 0;}
总结:对于合法下标,使用[]和at()效果一样;但对于非法下标,[]不会报错,at()会报错。所以推荐使用at() 。
7. append(), push_back()
#include <iostream>#include <string>using namespace std;int main (){ string s="01234"; s.append("567"); s.push_back('8'); string s1="99"; s.append(s1); char s2[5]="000"; s.append(s2); cout<<s<<endl; s+=s1; s+=s2; s+="aaa"; cout<<s<<endl; return 0;}
总结:append()可以在尾部追加char*或者string类型字符串,push_back()可以在尾部追加char字符。均可以用+来代替。
8.resize(),reserve()
#include <iostream>#include <string>using namespace std;void Out(string s);int main (){ string s="01234"; s.resize(8); Out(s); s.resize(3); Out(s); s="01234"; s.reserve(8); Out(s); s.reserve(3); Out(s); return 0;}void Out(string s){ cout<<"s="<<s<<endl; cout<<"s.size()="<<s.size()<<endl; cout<<"s.length()="<<s.length()<<endl; cout<<"s.max_size()="<<s.max_size()<<endl; cout<<"s.capacity()="<<s.capacity()<<endl; cout<<endl;}
总结:
resize(int n): 若n<当前size(),则只会保留前n个字符,多余的会删掉,同时size(),length()会改变,capacity()不变;若n>当前size(),则会用空格填充,size(),length(),capacity()都会改变。
reserve(int n): 若n<当前size(),什么都不会发生;若n>当前size(),只有capacity()会增大。
9. insert() ,erase(),swap()
#include <iostream>#include <string>using namespace std;int main (){ string s1="11111"; string s2="22222"; s1.swap(s2); cout<<"s1="<<s1<<endl; cout<<"s2="<<s2<<endl; string s="0123456789"; s.erase(2,3); cout<<"s.erase:"<<s<<endl; s.erase(5); cout<<"s.earse:"<<s<<endl; s.insert(0,"SS"); s.insert(7,"SS"); cout<<s<<endl; s.insert(10,"SS"); cout<<s<<endl; return 0;}
总结:
swap()用来交换两个string的值,
erase(int startpos,int len)从startpos位置开始删掉len个字符,erase(int start)从start开始删掉后面所有字符
insert()在规定位置插入字符串,下标越界则提示错误
10. find(),replace()
#include <iostream>#include <string>using namespace std;int main (){ string s1="abcdef"; cout<<s1.find('c')<<endl; cout<<s1.find("de")<<endl; s1.replace(0,2,"123"); cout<<s1<<endl; string s2="ABC"; s1.replace(2,1,s2); cout<<s1<<endl; s1.replace(s1.find("f"),1,"F"); cout<<s1<<endl; return 0;}
总结:
find()可以正序查找字符或者字符串,返回第一次出现的下标。rfind()则是倒序查找。
replace(int startpos,int len,char* a ||string a)从startpos位置开始,将后面的len个字符替换为指定字符串
11.c_str() , copy(), substr()
#include <iostream>#include <string>#include <string.h>using namespace std;int main (){ string s1="abcdef"; cout<<"s1.c_str()="<<s1.c_str()<<endl; char s2[20]; strcpy(s2,s1.c_str()); cout<<s2<<endl; char s3[20]; s1.copy(s3,4,1); s3[4]='\0'; cout<<s3<<endl; string s4; s4=s1.substr(2,2); cout<<s4<<endl; s4=s1.substr(2); cout<<s4<<endl; return 0;}
总结:
c_str():返回const char* 类型,值与原字符串值相同。
s.copy(char* s1,int len,int startpos)从s中的第startpos位置开始的len个字符赋值给s1,不过s1没有结束标志’\0’,需手动添加
s=s1.substr(int startpos,int len) s1从startpos位置开始len个字符赋值给s
s=s1.substr(int startpos)s1从startpos位置开始到结束的所有字符赋值给s
12. compare()
#include <iostream>#include <string>#include <string.h>using namespace std;int main (){ string s1="green apple"; string s2="red apple"; if(s1.compare(s2)==0)cout<<"s1==s2"<<endl; if(s1.compare(6,5,"apple")==0)cout<<"apple"<<endl; if(s1.compare(6,5,s2,4,5)==0)cout<<"12apple"<<endl; return 0;}
总结:
s1.compare(s2) : 若s1==s2则返回0
s1.compare(int startpos,int len,string s2) :若s1从startpos开始的len个字符构成的字符串与s2相等,则返回0
s1.compare(int sp1,int len1,string s2,int sp2,int len2):若s1从sp1开始的len1个字符构成的串 与 s2从sp2开始的len2个字符构成的串相等,则返回0
结束
如有错误请不吝赐教!谢谢!
参考资料:http://www.cplusplus.com/reference/
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- c++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- c++stl之string
- C++STL之string上
- C++STL之string下
- C++STL之String详解
- C++STL库函数之string用法总结
- Java的反射和内省机制
- 深度学习-深度信念(置信)网络(DBN)-从原理到实现(DeepLearnToolBox)
- 倒入项目到Android studio
- iOS开发中简单的图片浏览器
- 切比雪夫不等式的推导证明
- C++STL之string
- mac Eclipse无法启动,卡在loading org.eclipse.egit.core启动界面
- web.xml中load-on-startup的作用
- Java 递归
- c语言知识框架图
- 微信发送位置源码
- 经典滤波器的设计
- CODEVS 1907 方格取数 3
- 绝对强大的三个linux指令: ar, nm, objdump