• length():返回string长度,size()有相同效果。
    需要注意的是,string的length()操作并不会像C中的string.h中定义的strlen一样扫描整个字符串,理论性能更优,附strlen实现代码。

    #include <stdlib.h>
    size_t strlen( char *string ) //size_t stddef.h中定义的类型 等价于unsigned int
    {
      int length = 0;
      // 依次访问字符串的内容,计算字符数,直至遇到NUL终止符
      while( *string++ != '\0' )
          length += 1;
      return length;
    }

    同样需要注意,string作为类其长度已经以成员变量形式储存,由此并不需要‘\0’作为结束标志,即不需要判断字符串是否已经结束。实验中也可以看到,string并不以‘\0’结尾。

  • find(): 函数原型:

    size_t find ( const string& str, size_t pos = 0 ) const;
    size_t find ( const char* s, size_t pos, size_t n ) const;
    size_t find ( const char* s, size_t pos = 0 ) const;
    size_t find ( char c, size_t pos = 0 ) const;

    参数说明:
    pos:查找起始位置
    n:待查找字符串的前n个字符
    将返回索引首字母索引,与下文其他与find相关的区分开来。

  • find_first_of(): 函数原型:

    size_t find_first_of ( const string& str, size_t pos = 0 ) const;
    size_t find_first_of ( const char* s, size_t pos, size_t n ) const;
    size_t find_first_of ( const char* s, size_t pos = 0 ) const;
    size_t find_first_of ( char c, size_t pos = 0 ) const;

    参数表与find一致,但此函数查找时,只要str1含str2中任意一字符,就会返回str1中第一个命中str2中任意字符的字符索引。(即对顺次扫str1)

      string str1("I am change");
      string str2("caout");
      int k = str1.find_first_of(str2); // k = 2
      return 0;
  • erase(): 函数原型:

    sequence (1)    string& erase (size_t pos = 0, size_t len = npos);
    character (2)    iterator erase (iterator p);
    range (3)    iterator erase (iterator first, iterator last);

注意:此方法既对字符串原地修改,也可以返回修改过后的string,后同。
pos:擦除起点索引
len: 擦除字符个数,缺省时只擦除pos位置一个字符。

还可以通过迭代器控制擦除范围,如s.erase(s.begin()+1,s.end()-1)。

  • insert() : 函数原型:

string (1) string& insert (size_t pos, const string& str);

在pos位置插入str,str的第一个字符的新索引将会是pos。

  • append() :函数原型:

    string (1)    string& append (const string& str);
    substring (2)    string& append (const string& str, size_t subpos, size_t sublen = npos);
    c-string (3)    string& append (const char* s);
    buffer (4)    string& append (const char* s, size_t n);
    fill (5)    string& append (size_t n, char c);
    range (6)    template <class InputIterator>
     string& append (InputIterator first, InputIterator last);
    initializer list(7)    
    string& append (initializer_list<char> il);

    例程:

    // appending to string
    #include <iostream>
    #include <string>
    int main ()
    {
    std::string str;
    std::string str2="Writing ";
    std::string str3="print 10 and then 5 more";
    
    // used in the same order as described above:
    str.append(str2);                       // "Writing "
    str.append(str3,6,3);                   // "10 "
    str.append("dots are cool",5);          // "dots "
    str.append("here: ");                   // "here: "
    str.append(10u,'.');                    // ".........."
    str.append(str3.begin()+8,str3.end());  // " and then 5 more"
    str.append<int>(5,0x2E);                // "....."
    std::cout << str << '\n';
    return 0;
    }
  • 数值类型转string利器:to_string():函数原型:

    string to_string (int val);
    string to_string (long val);
    string to_string (long long val);
    string to_string (unsigned val);
    string to_string (unsigned long val);
    string to_string (unsigned long long val);
    string to_string (float val);
    string to_string (double val);
    string to_string (long double val);
  • string转char[] data() :仅简略介绍用法:

    string str="abc";
    char *p=str.data();
Last modification:April 20th, 2019 at 12:52 am
If you think my article is useful to you, please feel free to appreciate