C++:string类(十六章)

构造函数

  1. 构造函数:string(const char* s)
    字符指针
string s2("I am s2!!");
cout<<"s2 : "<
  1. 构造函数:string(size_type n,char c)
    重复char字符n次
string s3('$',15);
cout<<"s3 : "<

3.构造函数:string(const string& str)
复制构造函数

string s4(s2);
cout<<"s4 : "<
  1. 构造函数:string()
    默认构造函数
string s1;
cout<<"s1 : "<
  1. 构造函数:string(const char* s,size_type n)
    字符串的前n个字符(如果是 string参数,则赋值的是后面n个字符串)
string s5("I am a master",4);
cout<<"s5 : "<
  1. 构造函数:string(begin,end)
    如果是数组可以直接这样,因为数组名就是首字符地址。但是string对象则不能,因为不表示地址,所以&string[n]
char arr[]="I am Jeff and I am cool";
string s6(arr+5,arr+23);
cout<<"s6 : "<
string s7(&s6[5],&s6[10]);
cout<<"s7 : "<
  1. 构造函数:string(const string& str,size_type pos=0,size_type n=npos)
    从pos个字符开始,到n个字符结束。 npos表示字符串末尾。
string s8(s6,2,10);
cout<<"s8 : "<

功能

s1 +="I am Jeff ";               += 重载运算符
cout<<"s1 now :"<

输入

C风格字符串

    char info1[100],info2[100],info3[100];
    cin>>info1; 读取一个字符
    cin.getline(info2,100);  丢弃\n
    cin.get(info3,100);  将\n留在队列
    cout<<"info1 :"<
image.png

string风格

    string str1,str2;
    cin>>str1;        读取一个词,而不是一个character
    getline(cin,str2);      读取一行,删除\n
cin.getline(info1,100,':')
getline(cin,str1,':') 
确定边界字符,然后该字符会被删除
  1. C风格字符串,cin是调用对象。 cin.operator>>(info1)
    string字符串,string是调用对象. operator>>(cin,str1)
  2. getline有三种情况会被stop:
  • 到达文件尾,输入流eofbit被设置,fail()和eof()会返回true
  • 遇到分界字符,分界字符从输入流删除,但不存储它
  • 读取字符达到最大值(string::npos和可供分配内存字节数中较小一个),将设置输入流的failbit,fail()将返回true
  1. string的operator>>()函数遇到空白字符就会停止,并将空白字符符留在队列中

使用字符串

1. 比较字符串大小
2. 确定字符串长度【size()或者length()】
3. find()方法重载

size_type find(const string& str, size_type pos=0) const
从pos位置查找子字符串str,如果找到则返回首字符出现的位置。否则返回string::npos

size_type find(const char* s, size_type pos=0) const
同上

size_type find(const char* s,size_type pos=0, size_type n)
从pos位置开始,查找s前n个字符组成的子字符串,如果找到返回首字符位置,没找到返回string::npos

size_type find(char ch,size_type pos=0) const
从pos开始,查找ch。

find_first_of("hark")
就是找hark单词里的四个字符,如果出现某一个字符就返回首次出现的位置。

find_last_of("hark")
返回最后一次出现相关字符的位置

find_first_not_of(“xxx")

str1.find(ch) != string::npos为true的时候就是该字符存在于字符串内。

4. 查看分配的内存块大小
capacity()
reserve(size) 【请求内存块最小长度】

实际上C++分配的内存块大小比字符串要大,如果字符串不断增大,C++将分配一个两倍大的内存块

5. 返回一个指向C-风格字符串的指针
c_str()

……还有很多很多功能

你可能感兴趣的:(C++:string类(十六章))