C++学习(一)——标准库类型之string全解析
2016-04-27 21:40
519 查看
0. 标准库类型之string类
用户程序要使用 string 类型对象,必须包含相关头文件。如果提供了合适的 using 声明,那么编写出来的程序将会变得简短些。因此头文件部分必备的三行代码:
1. 几种初始化string 对象的方式
2. string对象的操作
3. 常见面试题:实现一个 String 类
首先选择数据成员,最简单的 String 只有一个 char* 成员变量。
其次决定支持哪些操作,常见的构造、析构、拷贝构造、赋值这几样是肯定要有的。
4.备注
另外一篇博客也很清晰的讲解了标准C++中的string类的用法总结
http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html
用户程序要使用 string 类型对象,必须包含相关头文件。如果提供了合适的 using 声明,那么编写出来的程序将会变得简短些。因此头文件部分必备的三行代码:
#include <iostream> #include <string> //如果包含非标准输入输出头文件iostream.h,编译会出错.string.h是C语言中字符串的头文件,不适用于C++. using namespace std;
1. 几种初始化string 对象的方式
代码 | 对应含义 |
---|---|
string s1 | 默认构造函数 s1 为空串 |
string s2(s1) | 将 s2 初始化为 s1 的一个副本 |
string s3(“value”) | 将 s3 初始化为一个字符串字面值副本 |
string s4(n, ‘c’) | 将 s4 初始化为字符 ‘c’ 的 n 个副本 |
Tables | Are |
---|---|
s.empty() | 如果 s 为空串,则返回 true,否则返回 false。 |
s.size() | 返回 s 中字符的个数 |
s | 返回 s 中位置为 n 的字符,位置从 0 开始计数 |
s1 + s2 | 把 s1 和s2 连接成一个新字符串,返回新生成的字符串 |
s1 = s2 | 把 s1 内容替换为 s2 的副本 |
v1 == v2 | 比较 v1 与 v2 的内容,相等则返回 true |
首先选择数据成员,最简单的 String 只有一个 char* 成员变量。
其次决定支持哪些操作,常见的构造、析构、拷贝构造、赋值这几样是肯定要有的。
class String{ public: // 默认构造函数 String(const char* str = NULL); // 复制构造函数 String(const String &str); // 析构函数 ~String(); // 字符串连接 String operator+(const String & str); // 字符串赋值 String & operator=(const String &str); // 字符串赋值 String & operator=(const char* str); // 判断是否字符串相等 bool operator==(const String &str); // 获取字符串长度 int length(); // 求子字符串[start,start+n-1] String substr(int start, int n); // 重载输出 friend ostream & operator<<(ostream &o,const String &str); private: char* data; int size; }; // 构造函数 String::String(const char *str){ if(str == NULL){ data = new char[1]; data[0] = '\0'; size = 0; }//if else{ size = strlen(str); data = new char[size+1]; strcpy(data,str); }//else } // 复制构造函数 String::String(const String &str){ size = str.size; data = new char[size+1]; strcpy(data,str.data); } // 析构函数 String::~String(){ delete[] data; } // 字符串连接 String String::operator+(const String &str){ String newStr; //释放原有空间 delete[] newStr.data; newStr.size = size + str.size; newStr.data = new char[newStr.size+1]; strcpy(newStr.data,data); strcpy(newStr.data+size,str.data); return newStr; } // 字符串赋值 String & String::operator=(const String &str){ if(data == str.data){ return *this; }//if delete [] data; size = str.size; data = new char[size+1]; strcpy(data,str.data); return *this; } // 字符串赋值 String& String::operator=(const char* str){ if(data == str){ return *this; }//if delete[] data; size = strlen(str); data = new char[size+1]; strcpy(data,str); return *this; } // 判断是否字符串相等 bool String::operator==(const String &str){ return strcmp(data,str.data) == 0; } // 获取字符串长度 int String::length(){ return size; } // 求子字符串[start,start+n-1] String String::substr(int start, int n){ String newStr; // 释放原有内存 delete [] newStr.data; // 重新申请内存 newStr.data = new char[n+1]; for(int i = 0;i < n;++i){ newStr.data[i] = data[start+i]; }//for newStr.data = '\0'; newStr.size = n; return newStr; } // 重载输出 ostream & operator<<(ostream &o, const String &str){ o<"<
4.备注
另外一篇博客也很清晰的讲解了标准C++中的string类的用法总结
http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析