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;
    } 
  • 相关阅读:
    关于软件工程的疑问
    thinkphp基础入门(2)
    JS What does `void 0` mean?
    第2章 TCPIP的工作方式
    JavaScript中var a=b=c=d的发现
    如何让 Git 忽略掉文件中的特定行内容?
    thinkphp基础入门(1)
    IIS网站服务器性能优化指南(转载)
    240个jquery插件
    解决_动态加载JS文件_调用时出错
  • 原文地址:https://www.cnblogs.com/zhangzeze/p/8781291.html
Copyright © 2011-2022 走看看