string相关学习笔记

来源:互联网 发布:网络4大粪坑 编辑:程序博客网 时间:2024/06/17 06:37
#include <iostream>#include<string>using namespace std;int main(){    //string的几种构造函数初始化    string s0 ("Initial string");//也可以直接这样:s0="Initial string";    cout<<s0<<endl;//输出:Initial string    string s1;    cout<<s1<<endl;//输出为空    string s2 (s0);//用另一个对象做初始化    cout<<s2<<endl;//输出:Initial string    string s3 (s0, 8, 3);//以对象s0字符串下标8开始连续3个赋给s3    cout<<s3<<endl;//输出:str    string s4 ("A character sequence");    cout<<s4<<endl;    string s5 ("Another character sequence", 12);//以字符串的前12个字符做初始化    cout<<s5<<endl;//输出:Another char    string s6 (10, 'x');//以10个x做初始化    cout<<s6<<endl;//输出:xxxxxxxxxx    string s7 (10, 42);      //以10个ASCII编码值为42的字符做初始化    cout<<s7<<endl;//输出:**********    string s8 (s0.begin(), s0.begin()+7);//以s0的一段做初始化,但不包括s0.begin()+7    cout<<s8<<endl;//输出:Initial    return 0;}int main(){    /**********************************    *    *append():给对象尾部追加一些字符    *    **********************************/    string s0("abcd");//s0="abcd"    s0.append("ef");//s0="abcdef"    string s1="123456789";    s0.append(s1,3,5);//从s1的下标3处开始添加5个字符    cout<<s0<<endl;//s0=abcdef45678    string s2="111";    s2.append(3,'2');//追加3个字符2,第二个参数也可以写ASCII值    cout<<s2<<endl;//s2=111222    string s3="abcd";    s3.append(s1.begin()+3,s1.begin()+6);//把s1的一段字符追加上    cout<<s3<<endl;//s3=abcd456    return 0;}int main(){/**********************************************************************    //assign()函数的几种用法    string s0="123456";    string base="abcdefghijklmnopq";    s0.assign(base);//s0="abcdefgh"    s0.assign(base,3,2);//s0="de"    s0.assign("987654321",7);//s0="9876543"    s0.assign(3,'a');//s0="aaa"    s0.assign(base.begin()+2,base.end()-5);//s0="cdefghijkl"***********************************************************************//*****************************************************    //at()函数的用法    string str ("123456789");    str.at(5)='0';//修改下标为5的值    cout<<str<<endl;//str="123450789"    cout<<str.at(2);//访问下标为2的值,输出为:3************************************************//******************************************************    //clear(),compare()用法    string s="12345";    s.clear();//清空s    string s1="defghilkjh";    string s2="abcdefgh";    s1.compare(s2);//把字符串s1与s2比较,s1大于s2,返回1;s1等于s2,返回0,小于返回-1    s1.compare(3,4,"abcd");//从s1下标3开始截取连续4个字符与"abcd"比较。    s1.compare(1,2,s2,2,3);//从s1,s2截取一段比较。**********************************************************//***********************************************************   //copy()函数的笔记   //size_t copy (char* s, size_t len, size_t pos = 0) const;    char buf[20];    string s0(8,'a');    cout<<s0<<endl;    string s1;    s1.resize(10);    size_t s=s0.copy(buf,5,0);//5代表拷贝5个字符,0代表从下标0开始,buf代表拷贝到的地方    //这个函数返回值为:拷贝的字符个数    //注意,我把参数buf改成s1,会报错。    buf[s]='\0';    cout<<buf<<endl;//buf="aaaaa"*******************************************************************/    return 0;}int main(){/**************************************************    //c_str()函数用法:const char* c_str() const;    char p[20];    string s("abcdef");    s.c_str();//函数返回一个指向正规C字符串的指针,但不能用char *p来接收。    strcpy(p,s.c_str());//只能这么用    cout<<p<<endl;//字符数组p=abcdef    const char *b=s.c_str();    cout<<b<<endl;//b=s*****************************************************//*****************************************************    //data()的用法:与c_str()函数类似    //const char* data() const;    char p0[20];    string s0="123456";    strcpy(p0,s0.data());//p0=s0    const char *a0=s0.data();//a0=s0    cout<<a0<<endl;******************************************************//*************************************************    //erase()函数的用法    string s("123456");    s.erase(0,2);//s="3456"    string s1("123456789");    s1.erase(s1.begin()+1,s1.begin()+3);//s1="1456789"    string s2("123456789");    s2.erase(s2.begin());//s2="23456789"**********************************************/    return 0;}int main(){    /**********************************************************************************************    //(1)size_t find (const string& str, size_t pos = 0) const;  //查找对象--string类对象    //(2)size_t find (const char* s, size_t pos = 0) const; //查找对象--字符串    //(3)size_t find (const char* s, size_t pos, size_t n) const;  //查找对象--字符串的前n个字符    //(4)size_t find (char c, size_t pos = 0) const;  //查找对象--字符    string s0="123456789";    string s1="456";    int a=s0.find(s1);//在s0中找到s1,返回s0的起始下标,a=3;找不到返回空    s0.find("34",2,2);//第一个参数代表查找的字符串,第二个参数代表从s0查找的起始下标,第三个参数从选定的起始下标开始,查找字符个数                        //找到了返回起始下标,找不到,返回-1    char c='6';    cout<<s0.find(c,3);//在s0中查找一个字符c,从下标3开始,找到返回下标,找不到返回一个未知数;第一个参数也可以传一个字符串    *********************************************************************************************************//*************************************************************************************************8    //find_first_not_of()    //返回在字符串中首次出现的不匹配str中的任何一个字符的首字符索引, 从index开始搜索, 如果全部匹配则返回string::npos。    //size_type find_first_not_of(const string &str,size_type index =0 )const;    //size_type find_first_not_of(const Char* str,size_type index =0 )const;    //从index开始起搜索当前字符串, 查找其中与str前num个字符中的任意一个都不匹配的序列, 返回满足条件的第一个字符索引, 否则返回string::npos。    //size_type find_first_not_of(const Char* str,size_type index,size_type num )const;    //返回在当前字符串中第一个不匹配ch字符的索引, 从index开始搜索, 没用收获则返回string::npos。    //size_type find_first_not_of(Char ch,size_type index =0 )const;    string s0="abcdefgh";    string s1="abcdef";    cout<<s0.find_first_not_of(s1);//从下标0开始,与s1中开始比较,找到第一个不匹配的字符,返回下标,相等返回一个未知数。    cout<<s0.find_first_not_of("cb",2,3);//从s0的下标2开始查找3个字符中首次与字符串不匹配的字符,并返回其下标。***********************************************************************************************************************//***********************************************************************************************    //find_first_of()笔记:    string s0="123456789";    string s1="456";    //从s0的下标1开始(第二个参数可以不写,默认从0开始),找到首次与s1中第一个字符相同的字符并返回其下标。    cout<<s0.find_first_of(s1,1)<<endl;    //从s0的下标1开始,查找与字符串“abc79”的前三个字符中某个字符首次匹配,返回在s0中下标值。    cout<<s0.find_first_of("abc79",1,3)<<endl;***************************************************************************************************//***************************************************************************************    //(1)size_t find_last_not_of (const string& str, size_t pos = npos) const;    //(2)size_t find_last_not_of (const char* s, size_t pos = npos) const;    //(3)size_t find_last_not_of (const char* s, size_t pos, size_t n) const;    //(4)size_t find_last_not_of (char c, size_t pos = npos) const;    string s0="abcdefghijk";    string s1="abd";    //从s0下标7开始(不写7从最后一位开始)与s0匹配(倒着走,7下来是6),返回首次字符不匹配的下标。这里返回是7    cout<<s0.find_last_not_of(s1,7);    //其他几个函数与find_first_not_of()类似*************************************************************************************/    //(1)size_t find_last_of (const string& str, size_t pos = npos) const;    //(2)size_t find_last_of (const char* s, size_t pos = npos) const;    //(3)size_t find_last_of (const char* s, size_t pos, size_t n) const;    //(4)size_t find_last_of (char c, size_t pos = npos) const;    string a="cde456";    string b="1234";    cout<<a.find_last_of(b);//意思与find_last_not_of()差不多,只是找的是首次匹配的    return 0;}int main(){    //没有back(),cbegin(),cend()函数    //compare()笔记//    int compare (const string& str) const;//    int compare (size_t pos, size_t len, const string& str) const;//    int compare (size_t pos, size_t len, const string& str,size_t subpos, size_t sublen) const;//    int compare (const char* s) const;//    int compare (size_t pos, size_t len, const char* s) const;//    int compare (size_t pos, size_t len, const char* s, size_t n) const;    string s0="bcdefgh";    string s1="bcdefgh";    //cout<<s0.compare(s1);//s0>s1 返回值大于0(具体值怎么计算没搞懂);小于返回值小于0,相等等返回0    cout<<s0.compare(3,8,"fg");//第一个参数表示从s0的哪个下标开始比较;第二个为比较的字符个数,第三个为与s0比较的字符串    cout<<s0.compare(0,2,s1,2,1);//最后两个参数分别表示字从符串s1的下标2开始选一个字符比较。    return 0;}int main(){/**************************************    没有front()函数    insert()函数:(1)string& insert (size_t pos, const string& str);(2)string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);(3)string& insert (size_t pos, const char* s);(4)string& insert (size_t pos, const char* s, size_t n);(5)string& insert (size_t pos, size_t n, char c);    void insert (iterator p, size_t n, char c);(6)iterator insert (iterator p, char c);(7)template <class InputIterator>   void insert (iterator p, InputIterator first, InputIterator last);**************************************/   //以下是关于insert()函数的示例    string str="012345";    string str2="6";    string str3="000abcd";    string::iterator it;    //str.insert(6,str2);//str="0123456"    //str.insert(6,str3,3,4);//str="012345abcd    //str.insert(5," 3210abc",3);//str="01234 325"    //str.insert(1,"to be");//str="0to be12345"    //str.insert(6,3,':');//str="012345:::"    //it = str.insert(str.begin()+5,',');//str="012345,"; *it=','    //str.insert (str.end(),3,'.');//str="012345..."    str.insert (str.begin()+2,str3.begin(),str3.begin()+3); //str="010002345"    return 0;}int main(){/******************************************************    //size()、length()、capacity()、max_size()示例    string str;    for(int i=0;i<100;i++)        str.push_back(i);    cout << "size: " << str.size() << "\n";    cout << "length: " << str.length() << "\n";    cout << "capacity: " << str.capacity() << "\n";    cout << "max_size: " << str.max_size() << "\n";//输出结果codeblocks下://size: 100//length: 100//capacity: 128//max_size: 1073741820*************************************************************//******************************************//  "+="、"="的重载:示例如下    string name ("John");    string family ("Smith");    name += " K. ";//name="John K. "    name += family;//name="John K. Smith"    string s;    s="123";    cout<<s;//输出123    //还有[]的重载,不做示例********************************************//************************************************    //rbegin()、rend()练习示例    string s0="123456789";    string::reverse_iterator rit=s0.rbegin();    int i=0;    while(i<9)//输出结果为:987654321    {        cout<<*rit;        rit++;        i++;    }    rit=s0.rend();    cout<<endl<<*rit;//输出空    rit--;    cout<<endl;    while(i>0)//输出为:123456789    {        cout<<*rit;        rit--;        i--;    }****************************************************/    return 0;}int main(){/*****************************************************************************************    //replace()用法示例    string base="this is a test string.";    string str2="n example";    string str3="sample phrase";    string str4="useful.";    string str=base;    str.replace(9,5,str2);//从str的下标9开始的连续5个字符用str2代替,若5改为0就相当于插入了    //str="this is an example string."    str.replace(19,6,str3,7,6);//从str的下标19开始的连续6个字符用从str3的下标7开始连续6个字符代替    //str="this is an example phrase."    str.replace(8,10,"just a");//从str的下标8开始的连续10个字符用"just a"代替    // str="this is just a phrase."    str.replace(8,6,"a shorty",7); //从str的下标8开始的连续6个字符用"a shorty"的前7个字符代替    //str="this is a short phrase."    str.replace(22,1,3,'!');//从str的下标22开始的连续1个字符用3个'!'代替    //str="this is a short phrase!!!"    str.replace(str.begin(),str.end()-3,str3);//把str从str.begin()到str.end()-3用str3代替。    // str="sample phrase!!!"************************************************************************************************//*******************************************///reserve(),resize()函数作用    string s;    for(int i=0;i<100;i++)        s.push_back(i);    //void reserve (size_t n = 0);    //s.reserve();//从新设置capacity的大小,参数不不写默认为0,如果设置的小于本身size的大小,不会改变capacity.//  函数原型:    //void resize (size_t n);    //void resize (size_t n, char c);    //s.resize(10);//会改变size大小,影响capacity(原先capacity如果小于新设置的size,否则不会改变)    string s1="45678";    s1.resize(10,'a');//第二个参数代表当设置的size大于原先的size时,剩余的位置补'a'./***********************************************/    return 0;}int main(){    //rfind()几种用法:/*****************************************************************************第一个参数表示要找的字符,第二个参数表示从那个地方开始向前找,找到返回第一个字符索引,找不到返回随机数    string (1)size_t rfind (const string& str, size_t pos = npos) const;    c-string (2)size_t rfind (const char* s, size_t pos = npos) const;    buffer (3)size_t rfind (const char* s, size_t pos, size_t n) const;    character (4)size_t rfind (char c, size_t pos = npos) const;*******************************************************************************///    string str="123456";//    string s("456");//    cout<<str.rfind(s,5);//输出3/***********************************************************************    //substr()函数作用://            string substr (size_t pos = 0, size_t len = npos) const;    string s0="123654";    cout<<s0.substr(0,1);//从s0的下标0开始截取1个字符;并返回所截取字符串。**************************************************************************//******************************************************************//  swap()函数://    void swap (string& str);    string s0="4567";    string s1="123";    s1.swap(s0);//交换两个string类型的字符串s1="4567",s0="123"********************************************************************/    string s;    getline(cin,s);    cout<<s;    return 0;}