string_01
内存释放和越界
越界:(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的更多相关文章
随机推荐
- yii2--windows下composer安装
//文件及存放目录 D:\php\php.exe D:\php\composer.phar //设置path(追加) ; D:\php //创建composer.bat文件 D:\php>ech ...
- python 多进程并发接口测试实例
#encoding=utf-8 import requests import json import os import hashlib print "register------" ...
- C/C++之extern "C"的用法解析
extern "C"的用法解析 http://blog.sina.com.cn/u/494a1ebc010004g5 C++中extern “C”含义深层探索 1.引言 C++语言 ...
- python条件判断if···else、循环while和for
1.if···else条件判断基本语法 if 条件: 执行语句 elif 条件 : 执行语句 …… else : 执行语句 var=input("请输入表示会员级别的数字(1-5):&quo ...
- JavaScript 实现全选 / 反选功能
JavaScript 实现全选 / 反选功能 版权声明:未经授权,内容严禁转载! 构建主体界面 编写 HTML 代码 和 CSS 代码,设计主题界面 <style> #user { wid ...
- C_Learning (4)
/ 预处理命令 / 宏定义 / 一般形式:#define 宏名 字符串 # 表示这是一条预处理命令 宏名是一个标识符,必须符合C语言标识符的规定 字符串可以是常数.表达式.格式化字符串等 / 注意: ...
- 20145106 《Java程序设计》第9周学习总结
教材学习内容总结 JDBC标准主要分为两个部分:JDBC应用程序开发者接口以及JDBC驱动程序开发者接口. 如果将来要换为Oracle数据库,只要置换Oracle驱动程序. Java中的数据类型和SQ ...
- noip 瑞士轮 - 归并
背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长 ...
- vijos 1360 八数码问题 - 启发式搜索
背景 Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们. 描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0 ...
- C#对象的new和不new的区别
new:为对象分配空间. 首先,直接声明一个变量:byte[] test;只是有了一个变量名字,而它是没有实际空间的,需要分配空间: 分配空间的方法: 1.使用new,byte[] test = ne ...