String类学习
来源:互联网 发布:python 多线程控制 编辑:程序博客网 时间:2024/05/16 19:50
String类简单实现
String类负责对字符串的存储和处理,可以用char*、字符数组等来表示,但最好还是用STL中的string类型。在C++中,string类型的头文件为#include<string>,其中,'string.h'和'cstring'都不是string类的头文件。这两个头文件主要定义C风格的字符串操作方法,比如说,strlen(),strcpy()等。'string.h'是C风格的头文件格式,’cstring‘是C++风格头文件,作用和'string.h'一样,目的是为了和C兼容。String类的实现如下:
class String {public:String(const char* str = NULL);//构造函数String(const String& other);//拷贝构造函数~String();//析构函数String& operator =(const String& other);//赋值函数String& operator +(const String& other);//字符串连接bool operator ==(const String& other);//判断字符串是否相等int getLength();private:char* data;};
其中,各成员函数实现如下:
String::String(const char* str) {if (str == NULL) {data = new char[1];*data = '\0';}else {int length = strlen(str);data = new char[length + 1];strcpy(data, str);}}String::String(const String& other) {if (!other.data) {data = 0;}data = new char[strlen(other.data) + 1];strcpy(data, other.data);}String::~String() {if (data) {delete[] data;data = 0;}}String& String::operator =(const String& other) {if (this == &other) {return *this;}else {delete[] data;if (!other.data) {data = 0;}else {data = new char[strlen(other.data) + 1];strcpy(data, other.data);}return *this;}
}String& String::operator+(const String& other) {String newString;if (!other.data) {newString = *this;}else if (!data) {newString = other;}else {newString.data = new char[strlen(data) + strlen(other.data) + 1];strcpy(newString.data, data);strcat(newString.data, other.data);}return newString;}bool String::operator==(const String& other) {if (strlen(data) != strlen(other.data)) return false;else {return strcmp(data, other.data) ? false : true;}}int String::getLength() {return strlen(data);}
c++字符串和c字符串的转换
c++提供的转换为c字符串的函数有:data()、c_str()和copy(),其中,data()以字符数组形式返回字符串内容,末尾没有'\0',c_str()同样返回字符数组,但是以'\0'结尾。copy()是把字符串的内容写入既有的c_string或者字符数组中。
对于c_str(),调用它时会产生一个const char*指针,它的使用例子如下:
int main(){ string str = "piaopiao9393" const char* cstr = str.c_str(); cout<<cstr<<endl; str = "9393piaopiao" cout<<cstr<<endl; return 0;}
这两次cstr的输出分别为'piaopiao9393'和'9393piaopiao',就是说,使用c_str()方法,当我改变str的值时,cstr的值也会跟着改变。为了防止这种情况发生,可以考虑先把数据复制出来,如下:
int main(){string str = "piaopiao9393";char* cstr = new char[81];strncpy(cstr,str.c_str(),str.size());cout<<cstr<<endl;str = "9393piaopiao";cout<<cstr<<endl;}上面这段代码,cstr的输出分别为'piaopiao9393'和'piaopiao9393'。
0 0
- 学习java String类
- string类学习
- C++ string类学习
- JAVA String类学习
- string 类的学习
- String类的学习
- C++ string 类 学习
- Java学习-String类
- java学习--String类
- String类学习笔记
- String类的学习
- String类 学习
- java-学习-string类
- String类学习
- Python-string类学习
- Java学习 String 类
- String类源码学习
- 学习字符串string类
- 元素下方点击出现倒三角
- 程序生成之编译、链接、加载浅析
- 外网通过dnat访问内网
- 原生js轮播图
- LeetCode专栏L001_Two_Sum
- String类学习
- Glide获取缓存大小并清除缓存图片
- Matlab调用VIBE算法
- HTML5复习 (6)
- 解决asp写弹出框的时候页面布局变乱+用法
- 正则表达式经验入门
- tensorflow实现偏微分方程的例子--模拟水滴掉落
- HDU 4734 F(x)(数位DP)
- error while loading shared libraries: xxx