zoukankan      html  css  js  c++  java
  • C++笔记------String类

    String类:使用时需要引用string头文件
      构造函数

      string(const char*s) //将string对象初始化成s指向的C的字符串
      string(size_type n,char c) //创建一个包含n个被初始化成字符C的元素的string对象
      string(const string) //复制构造函数
      string() //默认构造函数,创建一个长度为0的string对象
      string(const char*s,size_type n)//将string对象初始化成s指向的C的字符串前n个字符,即使超过NBTS的结尾
      //将string对象初始化为区间在[begin,end)内的字符。
      template<class Iter)
      string(Iter begin,Iter end)
      //将string对象初始化成对象str在位置pos到结尾的字符,或从pos开始n个字符。
      string(const string & str,string size_type pos=0,size_type n=npos)
      //将string对象初始化为对象str,并可能修改str(移动构造函数)C++11新增加的构造函数
      string(string && str)noexcept
      //将string对象初始化为初始列表il的字符。C++11新增加的构造函数
      string(initializer_list<char>il)
      //使用初始化列表创建str
      string comp_long { 'l','i','s','p'};
      string comp_long = { 'l','i','s','p'};

      string输入:
        对与C字符串:
          char a[20];
          cin >> a; //获取一个词,cin是对象,相当与(cin.operator>>(a));
          cin.getline(a,20); //获取一行,
          cin.get(a,20); //获取一行,
        对于string:
          cin >> string; //获取一个词,string是对象,相当与(operator>>(cin,string));
          getline(cin,string);//获取一行..
        两个getline:
          相同点:都有一个可选参数,指定使用那个字符确定输入边界;
          不同点:string版本的getline能自动调整大小;
    发生下列情况,string版本的getline()函数重输入中读取字符,存入到目标string中
    1.到达文件尾;
    2.遇到分界符(默认是' ');
    3.读取的字符数达到最大允许值(string::npos 和可供内存字节数中较小的一个);
    string::npos是字符串能存储最大字符数,通常是unsigned int或着unsigned long的最大值。

      遍历:
        1.数组方式
        2.迭代器
        3.at() // 与重载[]相比at()在越界时能抛出异常
      string转换成char*类型
        调用c_str()方法。
        把string拷贝到char buff[3]中
        调用copy(buff,3,0)方法。//从0开始copy3个字符到buff中。只拷贝字符但不会有空字符
      string连接
        1.调用重载+方法
        2.调用append(&string)方法。
      字符串的查找和替换
        1.查找调用find(...)方法。
        //从字符串的pos位置开始,查找子字符串str,查到:返回首次出现时其首字符的索引;没查到:返回string::npos
        size_type find(const string & str,size_type pos = 0)const
        //从字符串的pos位置开始,查找子字符串s,查到:返回首次出现时其首字符的索引;没查到:返回string::npos
        size_type find(const char * s,size_type pos = 0)const
        //从字符串的pos位置开始,查找s前n个字符组成的字符串,查到:返回首次出现时其首字符的索引;没查到:返回string::npos
        size_type find(const char * s,size_type pos = 0, size_type n)
        //从字符串的pos位置开始,查找字符ch,查到:返回首次出现时的位置;没查到:返回string::npos
        size_type find(char ch, size_type pos = 0)const

        
        //查找子字符或字符最后一次出现的位置
        rfind();
        //在字符串中查找参数中任何一个字符首次出现的位置
        find_first_of();
        //在字符串中查找参数中任何一个字符最后一次出现的位置
        find_last_of();
        //在字符串中查找第一个不包含与参数中的字符,并返回字符索引
        find_first_not_of()
        2.替换调用replace(...)方法。
      string的区间删除和插入
        1.插入调用insert(...)方法。
        2.删除调用erase(...)方法。
    为了避免重复申请内存,C++在实现时会分配一个比实际字符串大的内存块,方法capacity() 返回当前分配给字符串的内存块的大小reserve()用来申请最小的内存长度。

    测试程序:

    #include <iostream>
    #include <string> 
    #include <string.h>
    using namespace std;
    int main()
    {
        char a[]="I am Zhang Zeze";
        char b[]="winner or loser";
        char a1[20];
        string str1(a);
        string str2(10,'c');
        
        string str3;
        str3 = str1 + str2;
        string str4(str1);
        string str5(b,5);
        string str7(&(str5[1]),&(str5[4]));
        //string str6 = {'I','L','Y'};//我用的部是C++11所以并不支持
        cout << str1 << endl;  // I am Zhang Zeze
        cout << str2 << endl;  // cccccccccc
        cout << str3 << endl;  // I am Zhang Zezecccccccccc
        cout << str4 << endl;  // I am Zhang Zeze
        cout << str5 << endl;  // winne
        //cour << str6 << endl; 
        cout << str7 << endl;  // inn
        
        strcpy(a1,str7.c_str());
        cout << a1 << endl;   // inn
        
        str1.append(str5);    //将str5添加到str1 
        cout << str1 << endl;//I am Zhang Zezewinne
        
        int n = str5.find(str7);
        cout << n << endl;    //1,str7在str5中首次出现位置 
         
        
        cout << str7.find('n') << endl; //1,在str7中‘n’首次出现位置 
        
        str1.insert(2,str5);  //在指定位置插入字符串 
        cout << str1 <<endl; //I winneam Zhang Zezewinne
        
        str1.clear();        
        cout << str1 << endl;//清空字符串 
        
        return 0;
    } 
  • 相关阅读:
    【转】【SEE】基于SSE指令集的程序设计简介
    【转】【Asp.Net】asp.net服务器控件创建
    ControlTemplate in WPF ——ScrollBar
    ControlTemplate in WPF —— Menu
    ControlTemplate in WPF —— Expander
    ControlTemplate in WPF —— TreeView
    ControlTemplate in WPF —— ListBox
    ControlTemplate in WPF —— ComboBox
    ControlTemplate in WPF —— TextBox
    ControlTemplate in WPF —— RadioButton
  • 原文地址:https://www.cnblogs.com/zhangzeze/p/8781291.html
Copyright © 2011-2022 走看看