PoEduo - C++阶段班【Po学校】-10 STL string- 课堂笔记

 STL string类

1-->可变长字符串类

 1.0  与C语言中的string.h和C++中的cstring完全的不同。

1.1  Wstring   和 string 区别,前者宽字节 为unicode 编码,后者为窄字节。

 


 

 2--> string构造 &  赋值操作       

 2.0  string构造函数

2.0.0  string();  //创建一个空的字符串 例如: string str;     

2.0.1  string(const string& other); //使用一个string对象初始化另一个string对象

2.0.2  string(const char* str);  //使用字符串str初始化

2.0.3  string(int n, char c);  //使用n个字符c初始化

2.0.4  //例子:

//默认构造函数
string s1;

//拷贝构造函数
string s2(s1);
string s2 = s1;

//带参数构造函数
char* str = "I Love Mark";
string s3(str);
string s4(10, 'A');

 

2.1  string基本赋值  operator =()  与  assign()

2.1.0  string& operator=(const char* str);  //char*类型字符串 赋值给当前的字符串

2.1.1  string& operator=(const string &other);  //把字符串other赋给当前的字符串

2.1.2  string& operator=(char c);  //字符赋值给当前的字符串

 

2.1.3  string& assign(const char *str);  //把字符串str赋给当前的字符串

2.1.4  string& assign(const char *str, int n); //把字符串str的前n个字符赋给当前的字符串

2.1.5  string& assign(const string &other);  //把字符串other赋给当前字符串

2.1.6  string& assign(int n, char c);  //用n个字符c赋给当前字符串

2.1.7  string& assign(const string &s, int start, int n); //将s从start开始n个字符赋值给字符串

 

2.2  string存取字符  operator[] ()与 at()

2.2.0  char& operator[](int n);  //通过[]方式取字符

2.2.1  char& at(int n);  //通过at方法获取字符

2.2.3  //例子:

string s = "I Love You!";
char c = s[1];
c = s.at(1);

2.2.4  问:string中存取字符[]和at的异同?

2.2.5  答: 1 相同,[]和at都可以返回第n个字符。 2 不同,at访问越界会抛出异常,[]越界会直接程序会挂掉。

 

 


3-->长度 

 3.0  size_t size(const string &str) const;  //求字符串str的长度

3.1  size_t length() const;  //求字符串str的长度,和size()没有区别

 

3.2  bool empty ( ) const;  //是否为空字符串,true为空,false为不空

3.3  size_t max_size ( ) const;  //string类最大长度

 

3.4  size_t capacity ( ) const;  //当前不增加长度,能存放的最大的长度,会动态改变,会根据字符串长度变化而变化

3.5  void resize ( size_t n, char c );  //字符串长度不足n个时,就填充 char c到字符串

3.6  void resize ( size_t n );    //重新分配了size, 它会重置catacity()的值

 


  

4--> 查找和替换  

 4.0  string查找

4.0.0  int find(const string& str, int pos = 0) const;  //查找str第一次出现位置,从pos开始查找

4.0.1  int find(const char* s, int pos = 0) const;   //查找s第一次出现位置,从pos开始查找

4.0.2  int find(const char* s, int pos, int n) const;   //从pos位置查找s的前n个字符第一次位置

4.0.3  int find(const char c, int pos = 0) const;   //查找字符c第一次出现位置

 

4.0.4  int rfind(const string& str, int pos = npos) const; //查找str最后一次位置,从pos开始查找

4.0.5  int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找

4.0.6  int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置

4.0.7  int rfind(const char c, int pos = 0) const;  //查找字符c最后一次出现位置

4.1   string替换 

4.1.0  string& replace(int pos, int n, const string& str);  //替换从pos开始n个字符为字符串str

4.1.1  string& replace(int pos, int n, const char* s);   //替换从pos开始的n个字符为字符串s

 

 


 

5-->比较   

  string比较操作  operator==()  和 compare() 

5.0  int compare(const string &str) const;  //与字符串str比较

5.1  int compare(const char *s) const;  //与字符串s比较

 

5.2  compare函数在>时返回 1,<时返回 -1,==时返回 0

5.3  比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的A比小写的a小。

5.4  operator== 和 compare()  区别:compare()可以指定位数来进行比较

 

 


 

 6-->string 子串截取substr()

  substr()函数  

6.0  string substr(int pos = 0, int n = npos)const;  //返回由pos开始的n个字符组成的字符串。  

 


 

7-->string插入和删除 

7.0  string插入 insert() 

7.0.1  string& insert(int pos, const char* s);   //插入字符串

7.0.2  string& insert(int pos, const string& str);   //插入字符串

7.0.3  string& insert(int pos, int n, char c);  //在指定位置插入n个字符c

 

7.1  string删除 erase()  

7.1.0  string& erase(int pos, int n = npos);  //删除从Pos开始的n个字符

 

 


 

8-->追加(拼接) 

8.0  string拼接   operator+=  与 append() 

8.1  string& operator+=(const string& str);  //重载+=操作符 

8.2  string& operator+=(const char* str);  //重载+=操作符 

8.3  string& operator+=(const char c);  //重载+=操作符 

 

8.4  string& append(const char *s);  //把字符串s连接到当前字符串结尾 

8.5  string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾 

8.6  string& append(const string &str);  //同operator+=() 

8.7  string& append(const string &str, int pos, int n); //把字符串str中从pos开始的n个字符连接到当前字符串结尾 

8.8  string& append(int n, char c);  //在当前字符串结尾添加n个字符c

 


 

9-->交换   swap()

 9.0  这是一个成员函数,this.swap(const string& str);  //把字符串str与当前对象互换

  

10-->转换C风格字符串 this.c_str()   this.data()

10.0  const char* c_str ( ) const;  //返回const char*的C风格的字符串,以null结尾

10.1  //示例:  需要C风格的字符串char* str,就用this.c_str()转换。

string num = "1234567890";
strlen(num.c_str());

10.2  注意返回值是const char*,有时需要转换

void f1(char *str)
{
}
int main()
{
     string num = "1234567890";
      f1(const_cast<char*>(num.c_str()));       
}

 10.3 const char* data() const;  //返回const char*数组,非null结尾 

 


 

11——>扩展知识点:

11.0    模板 

//泛型         类似C中的void*
template<typename T>     //T为占位符
void Swap(T& lhs,T&rhs)
{
    T temp;
    temp = lhs;
    lhs = rhs;
    rhs = temp;
}

int main()
{
     int num1 = 1, num2 = 2;
     Swap(num1, num2);  
}

 

11.1   迭代器  iterator   代表某个元素。

 


  

作业:再次完成MyString 和MyArray

 

posted on 2017-01-12 21:23  zzdoit  阅读(171)  评论(0编辑  收藏  举报

导航