西大的阳光下有大洋的影子

我不上网了

c++STL系列之String

开头总结:

C++中STL的概念总结:

1、容器 

2、迭代器

STL中所有的不同库都是容器的概念体现,基本操作都是基于迭代器的操作。

一、string

string 其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等。下图是字符串在内存中的存储方式,所以对于string类型,依旧可以使用下标来操作。

二、string常用方法

//头文件
#include<string>

//声明
string str = “abc”;

//str的长度,结果为:3
str.length();
str.size();

//得到str的头字符,输出为:a
str.front();
//得到str的尾字符,输出为:c
str.back();

//得到str的第i位置的字符
str.at(i);
str[i];//两种方法都可以,第一种方法在字符不存在时不会报错

三、高阶用法

字符串的拼接:

    string str = "abc";
    //str添加,该方法只能添加一个字符
    str.push_back('d');//str = "abcd"
    //str拼接也可以使用 + 操作符
    string str1 = "ef";
    str += str1;//str = "abcdef"
    //str拼接也可以使用 append() 函数,将str1添加到str后
    str.append(str1);
    //append() 函数,也可以指定将str2指定部分添加到str后
    string str2 = "qwertyu";
    //将str2的下标1-4位置添加到str后
    str.append(str2,1,4);//str = "abcdefwert",str = "abcdef"

切割字符串:

    //切割字符串
    string str11 = "abcdefg";
    //,第一个参数为位置,第二个参数为长度,保留位置0后面的三个字符
    str11 = str11.substr(0,3);

翻转字符串:

    string s1 = "abc";
    //翻转字符串
    reverse(s1.begin(),s1.end());//开始位置,结束位置

字符串的替换:

    string str2 = "qwertyu";
    //将str2替换为str
    str.assign(str2);//此时str的值为str2的字符串
    str.assign(str2,4,2);//将str2的下标4后的2个字符替换str

字符串的插入:

    //插入 str.insert(pos,value)
    str.insert(1,"sss");//在str下标1的位置插入“sss"

字符串的删除:

    //erase()删除操作
    string str ("This is an example phrase.");
    string::iterator it;
 
    // 第(1)种用法
    str.erase (10,8);
    cout << str << endl;        // "This is an phrase."
 
    // 第(2)种用法,删除一个字符
    it=str.begin()+9;
    str.erase (it);
    cout << str << endl;        // "This is a phrase."
 
    // 第(3)种用法,删除区间
    str.erase (str.begin()+5, str.end()-7);
    cout << str << endl;        // "This phrase."

字符串的查找:string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。

    //find()查找
    string str = "tsssy";
    int p = str.find('s',0);//第二个参数为起始查找位置,省略默认从0开始
    string::size_type po = str.find("s");//p和pp都为记录查找位置
    if (p != str.npos)
    {
        cout<<p<<endl;//如果找到则返回索引位置,结果为:1
    } else
        cout<<"没有找到"<<endl;
    //子串出现在母串中的首次出现的位置
    int p_first = str.find_first_of("s");
    cout<<p_first<<endl;//结果为:1
    //子串出现在母串中的末次出现的位置
    int p_last = str.find_last_of("s");
    cout<<p_last<<endl;//结果为:3

    //查找子串与母串均不相同的首个位置
    int p_first_no = str.find_first_not_of("tf");
    cout<<p_first_no<<endl;//结果为:1
    //查找子串与母串均不相同的末个位置
    int p_last_no = str.find_last_not_of("ey");
    cout<<p_last_no<<endl;//结果为:3

字符串的比较compare():

    //比较
    string a = "asdf";
    string b = "qwer";
    string c = "sdf";
//    1.直接比较两个字符串,返回0则表示两个字符串相同
    int number = a.compare(b); //结果为 number=-1;
    int number1 = b.compare(b); //结果为 number=0;
    int number2 = a.compare("asdf"); //结果为 number=0;

//    2.一个字符串的子串与另一个字符串比较
    int number3 = a.compare(1,3,c); //用a[1:3]和c相比,结果为 number=0;
//字符串b从下标为1的字符开始的三个字符与字符串d比较,显然都是fgh,所以相等,返回0
    int number4 = b.compare(1,3,c); //结果为 number=1;
    int number5 = a.compare(1,3,"sdf"); //结果为 number=0;

//    3.一个字符串的子串与另一个字符串的子串比较
    int number6 = a.compare(1,3,c,0,2); //结果为 number= 0;
//字符串a从下标为1的地方开始的后3个字符是sdf,字符串c从下标为0的字符开始的后三个字符是sdf,所以相等

str.c_str():

c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.(其实它指向的是string对象内部真正的char缓冲区),所以返回const,以防止用户的修改。
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。

 

posted on 2020-11-25 16:48  我不上网了  阅读(132)  评论(0编辑  收藏  举报

导航