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;
} 
原文地址:https://www.cnblogs.com/zhangzeze/p/8781291.html