zoukankan      html  css  js  c++  java
  • 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中的字符串样式。
  • 相关阅读:
    序列化
    执行mysql脚本
    MinGW-notepad++开发c/c++程序
    MySql免安装版配置方法
    Wamp 简单使用方法
    [锋利JQ]-图片提示效果
    [锋利的JQ]-超链接提示效果
    PHPcms 系统简单使用
    NC帮助文档网址
    NC的开发模型
  • 原文地址:https://www.cnblogs.com/wobushangwangl/p/14037050.html
Copyright © 2011-2022 走看看