C++之string

C++之string

前言

    string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着良好的接口。虽然也有一些弊端,但是瑕不掩瑜。

基本操作

1)头文件

#icnlude < string > 

2)声明

string s;//声明一个string 对象
string ss[10];//声明一个string对象的数组

3)初始化

    使用等号的初始化叫做拷贝初始化,不使用等号的初始化叫做直接初始化。

    string s;//默认初始化,一个空字符串
    string s1("ssss");//s1是字面值“ssss”的副本
    string s2(s1);//s2是s1的副本
    string s3=s2;//s3是s2的副本
    string s4(10,'c');//把s4初始化
    string s5="hiya";//拷贝初始化
    string s6=string(10,'c');//拷贝初始化,生成一个初始化好的对象,拷贝给s6

    //string s(cp,n)
    char cs[]="12345";
    string s7(cs,3);//复制字符串cs的前3个字符到s当中

    //string s(s2,pos2)
    string s8="asac";
    string s9(s8,2);//从s2的第二个字符开始拷贝,不能超过s2的size

    //string s(s2,pos2,len2)
    string s10="qweqweqweq";
    string s11(s10,3,4);//s4是s3从下标3开始4个字符的拷贝,超过s3.size出现未定义

4)特性描述

str.size();        //返回当前字符串的大小
str.length();       //返回当前字符串的长度
str.empty();        //当前字符串是否为空,空则返回true

5)push_back(),在尾部添加字符


string str1("abc");  
str1.push_back('d');   //字符串之后插入一个字符,str1="abcd"

6)substr操作

//s.substr(pos1,n)返回字符串位置为pos1后面的n个字符组成的串,假如目标串不够这些字符,则最多就只有这些字符  
string s2=s.substr(1,5);  //bcdef
//s.substr(pos)//得到一个pos到结尾的串
string s3=s.substr(4);  //efg

7)insert操作

    string str="to be question";
    string str2="the ";
    string str3="or not to be";
    string::iterator it;

    //s.insert(pos,str)//在s的pos位置插入str
    str.insert(6,str2);                 // to be the question

    //s.insert(pos,str,a,n)在s的pos位置插入str中插入位置a到后面的n个字符
    str.insert(6,str3,3,4);             // to be not the question

    //s.insert(pos,cstr,n)//在pos位置插入cstr字符串从开始到后面的n个字符
    str.insert(10,"that is cool",8);    // to be not that is the question

    //s.insert(pos,cstr)在s的pos位置插入cstr
    str.insert(10,"to be ");            // to be not to be that is the question

    //s.insert(pos,n,ch)在s.pos位置上面插入n个ch
    str.insert(15,1,':');               // to be not to be: that is the question

    //s.insert(s.it,ch)在s的it指向位置前面插入一个字符ch,返回新插入的位置的迭代器
    it = str.insert(str.begin()+5,','); // to be, not to be: that is the question

    //s.insert(s.it,n,ch)//在s的it所指向位置的前面插入n个ch
    str.insert (str.end(),3,'.');       // to be, not to be: that is the question...

    //s.insert(it,str.ita,str.itb)在it所指向的位置的前面插入[ita,itb)的字符串
    str.insert (it+2,str3.begin(),str3.begin()+3); // to be, or not to be: that is the question...

8)erase操作

// string.erase(pos, n)  删除从pos开始的n个字符
string::iterator i;
string s="abcde";
s.erase(1, 2);    //ade

//string.erase(pos)     删除pos处的一个字符(pos是string类型的迭代器)
string::iterator i;
string s = "abcde";
i = s.begin() + 3;
s.erase(i);             //abce

//string.erase(first,last)   删除从first到last中间的字符(first和last都是string类型的迭代器)
string::iterator i;
string s = "abcde";
s.erase(s.begin() + 1, s.end() - 1);   //a

9)append操作

string str;
string str2 = "Writing ";
string str3 = "print 10 and then 5 more";

//直接追加一个str2的字符串
str.append(str2);                       // "Writing "
//后面追加str3第6个字符开始的3个字符串
str.append(str3, 6, 3);                   // "10 "
//追加字符串形参的前5个字符
str.append("dots are cool", 5);          // "dots "
//直接添加
str.append("here: ");                   // "here: "
//添加10个'.'
str.append(10u, '.');                    // ".........."
//添加str3迭代器范围的字符串
str.append(str3.begin() + 8, str3.end());  // " and then 5 more"
//最后这个比较特殊,意思是添加5个'A',实际上参数里面的65对应的asc码就是65
str.append<int>(5, 65);                // "....."
//字符串追加也可以用重载运算符实现
str += "lalala";
std::cout << str << '\n

10)assign操作

string str;
string base = "The quick brown fox jumps over a lazy dog.";

// used in the same order as described above:
//直接把base赋值给str
str.assign(base);
std::cout << str << '\n';
//把base第10个字符以及后面的8个字符赋给str
str.assign(base, 10, 9);
std::cout << str << '\n';         // "brown fox"
//把参数中的0到6个字符串赋给str
str.assign("pangrams are cool", 7);
std::cout << str << '\n';         // "pangram"
//直接使用参数赋值
str.assign("c-string");
std::cout << str << '\n';         // "c-string"
//给str赋值10个'*'字符
str.assign(10, '*');
std::cout << str << '\n';         // "**********"
//赋值是10个'-'
str.assign<int>(10, 0x2D);
std::cout << str << '\n';         // "----------"
//指定base迭代器范围的字符串
str.assign(base.begin() + 16, base.end() - 12);
cout << str << '\n';         // "fox jumps over"

11)compare操作

    和strcmp函数一样,如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1。

    在compare当中还支持部分比较,里面有6个参数可以设置。

string s1 = "123", s2 = "123";
cout << s1.compare(s2) << endl;//0

s1 = "123", s2 = "1234";
cout << s1.compare(s2) << endl;//-1

s1 = "1234", s2 = "123";
cout << s1.compare(s2) << endl;//1

12)连接操作

cout << "方式1:" << endl;
string s1 = "123";
string s2 = "456";
s1 += s2;
cout << "s1 = " << s1 << endl;  //123456

cout << "方式2:" << endl;
string s3 = "123";
string s4 = "456";
s3.append(s4);
cout << "s3 = " << s3 << endl;  //123456

猜你喜欢

转载自blog.csdn.net/qq_27022241/article/details/80744135
今日推荐