内存释放和越界

  越界:(1)、复制越界,(2)、取值越界

构造函数

  (1)、默认 空(无参)

  (2)、拷贝(const string &)

  (3)、带参数: const char *  // ZC: 经测试 和 查看源码,该构造函数也是将指针指向的内容复制一份,而非直接使用参数指针的值。

        int n, char c

字符操作:

  [?]  ==> const char &    (ZC: 获取)

  at(?) ==> const char &    (ZC: 获取)

  [?]  ==> char        (ZC: 设置)

  at(?) ==> char        (ZC: 设置)

[?]越界  ==> 内存错误 ==> 崩溃

at(?)越界 ==> out_of_range异常

出:

  const char *  string::c_str() const;

  ZC: const函数: 不能改变类中非静态成员的值

进:

  int string::copy(char* s, int n, int pos=0) const;

  返回 实际拷贝的字符个数

  s : 为何不使用 "const char* s"?

  n : s中需要拷贝的字符的个数

  pos : s中 起始字符的索引值idx

长度:(不包括结尾的'\0')

  int string::length() const;

  bool string::empty() const;

赋值:

  string& = const string &

  string& assign(const string &)  // 这个和下面的有重复?

  string& assign(const char *s, int n);  // s中的前n个字符

  string& assign(const string &)

  string& assign(const string & s, int start, int n);

    start : s字符中的起始索引

    n : s中的n个字符

连接:

  string& += const string &      尾部

  string& += const char *      尾部

  string& append(const char *);    尾部

  string& append(const char *s, int n);    s中的前n个字符,添加到尾部

  string& append(const string &);    尾部

  string& append(const string &s, int pos, int n);    尾部

    pos : s中字符的开始索引

    n : s中需要拷贝的字符个数

  string& append(int n, char c);    n个字符c,添加到尾部

比较:

  int string::compare(const string *s) const;

  int string::compare(const char *s) const;

    >  返回1

    <  返回-1

    == 返回0

  ASCII码表,越前越小

子串:

  string string::substr(int pos=0, int n=npos) const;

    pos : 开始索引

    n : n个字符(默认值npos是指string中的全部字符吗?)

查找:

  int string::find(char c, int pos=0) const;  // 从pos开始找字符c的位置

  int string::find(const char *s, int pos=0) const;  // 从pos开始找字符串s的位置

  int string::find(const string &s, int pos=0) const;  // 从pos开始找字符串s的位置

    找不到,返回-1

    找到第一个符合条件的,就返回吗?

  

  int string::rfind(char c, int pos=0) const;  // 从pos开始找字符c的位置

  int string::rfind(const char *s, int pos=0) const;  // 从pos开始找字符串s的位置

  int string::rfind(const string &s, int pos=0) const;  // 从pos开始找字符串s的位置

    找不到,返回-1

    找到第一个符合条件的,就返回吗?

    返回的是 正向的索引值?还是逆向的索引值?

插入:

  string& string::insert(int pos, const char *s);  // 在pos位置插入字符串s

  string& string::insert(int pos, const string &s);  // 在pos位置插入字符串s

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

删除:

  string& string::erase(int pos=0, int n=npos); // 删除pos开始的n个字符,返回删除后的字符串

替换:

  string& string::replace(int pos, int n, const char *s);

  string& string::replace(int pos, int n, const string &s);

  这两个函数是分两个步骤执行的:

    (1)、删除 pos开始的 n个字符

    (2)、pos处 插入 字符串s

交换:

  void string::swap(string & s2);

string_01的更多相关文章

随机推荐

  1. [lr] 常用快捷键

    界面基本操作 F5               : 隐藏/显示上部面板 F6               : 隐藏/显示下部面板 F7               : 隐藏/显示左部面板 F8     ...

  2. testng入门教程13同文件数据驱动

    下面是@DataProvider有name和没有name时 有name的时候可以引用name 即:@DataProvider(name="testData")----------& ...

  3. mysql导入数据方法和报错解决

    mysql -u root -p databasename < db.sql 数据库导入数据时,MySQL收到下面异常:ERROR 1153 (08S01): Got a packet bigg ...

  4. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 5. Dynamic Programming

    10192 最长公共子序列 http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid=8&page=sho ...

  5. 复制控件出错--提示XX控件不存在

    有时候比较喜欢复制粘贴,但是结果就是,经常出现XX控件找不到,或者不存在之类的话~~ 错误如下: 在相当郁闷的时候,尝试了一种很土土的方法,就是直接新建一个同名新页面,把前台和后台的代码复制进去~~ ...

  6. C++11使用emplace_back代替push_back

    最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多. 首先,写 ...

  7. 【转】五分钟读懂大数据核心MapReduce架构及原理

    什么是MapReduce Hadoop中的MapReduce是一个简单的软件框架,基于它写出的应用程序可以运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级数据 MapReduc ...

  8. Linux基础命令---gzip

    gzip gzip通过Lempel-ziv算法来压缩文件,压缩的时候保留每个文件的所有者.权限.修改时间.对于符号链接,gzip将会忽略它. 如果压缩的文件名对其文件系统来说太长,则gzip将截断它. ...

  9. nginx+tomcat把带WWW域名自动跳转到不带www域名方法

    nginx+tomcat把带WWW域名自动跳转到不带www域名方法在nginx.conf里面 include /etc/nginx/conf.d/*.conf;在应该server里增加: if ($h ...

  10. JUC原子类 1

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ; 2. 数组类型: AtomicI ...