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
原创粉丝点击