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/

0 0