String类的简单实现
2017-10-30 13:03
155 查看
一句话总结:注意C++string与C中的字符数组的区别,C++string遇到'\0'不一定会结束输出。
#include <iostream>
#include <string.h>
using namespace std;
class String
{
friend ostream& operator<<(ostream& out, String& s);
public:
String(const char* str="");
~String();
String(const String& other);
String& operator=(const String& other);
unsigned int size() const;
private:
char* data;
unsigned int length;
};
String::String(const char* str)
{
if (NULL == str)
{
length = 0;
data = new char[1];
data[0] = '\0';
}
else
{
length = strlen(str);
data = new char[length+1];
}
if (data != NULL)
{
strcpy(data, str);
}
}
String::~String()
{
if (data != NULL)
{
delete data;
}
}
String::String(const String& other)
{
if (&other != this)
{
if (data != NULL)
{
delete data;
}
length = other.size();
data = new char[length + 1];
memcpy(data, other.data, length);
}
}
String& String::operator=(const String& other)
{
if (&other != this)
{
if (data != NULL)
{
delete data;
}
length = other.size();
data = new char[length+1];
if (data != NULL)
{
memcpy(data, other.data, length);
data[length] = '\0';
}
}
return *this;
}
ostream& operator<<(ostream& out, String& s)
{
out << s.data;
return out;
}
unsigned int String::size() const
{
return this->length;
}
int main(int argc, char const *argv[])
{
String str("hello");
cout << str <<endl;
cout << str.size() <<endl;
String str2 = "boy";
cout << str2 <<endl;
String str3 = str;
cout << str3 <<endl;
return 0;
}
zjy@ubuntu:~$ ./string
hello
5
boy
hello
zjy@ubuntu:~$
#include <iostream>
#include <string.h>
using namespace std;
class String
{
friend ostream& operator<<(ostream& out, String& s);
public:
String(const char* str="");
~String();
String(const String& other);
String& operator=(const String& other);
unsigned int size() const;
private:
char* data;
unsigned int length;
};
String::String(const char* str)
{
if (NULL == str)
{
length = 0;
data = new char[1];
data[0] = '\0';
}
else
{
length = strlen(str);
data = new char[length+1];
}
if (data != NULL)
{
strcpy(data, str);
}
}
String::~String()
{
if (data != NULL)
{
delete data;
}
}
String::String(const String& other)
{
if (&other != this)
{
if (data != NULL)
{
delete data;
}
length = other.size();
data = new char[length + 1];
memcpy(data, other.data, length);
}
}
String& String::operator=(const String& other)
{
if (&other != this)
{
if (data != NULL)
{
delete data;
}
length = other.size();
data = new char[length+1];
if (data != NULL)
{
memcpy(data, other.data, length);
data[length] = '\0';
}
}
return *this;
}
ostream& operator<<(ostream& out, String& s)
{
out << s.data;
return out;
}
unsigned int String::size() const
{
return this->length;
}
int main(int argc, char const *argv[])
{
String str("hello");
cout << str <<endl;
cout << str.size() <<endl;
String str2 = "boy";
cout << str2 <<endl;
String str3 = str;
cout << str3 <<endl;
return 0;
}
zjy@ubuntu:~$ ./string
hello
5
boy
hello
zjy@ubuntu:~$
相关文章推荐
- c++22、string虚假泄露问题,以及简单string类实现
- C++自定义String类(简单的实现功能)
- 实现C++标准库string类的简单版本
- string类的简单实现(深拷贝,浅拷贝)
- 使用字符指针实现的一个简单string类
- 自己实现简单的string类
- java实现利用String类的简单方法读取xml文件中某个标签中的内容
- 简单模仿string类的设计实现.
- String类简单实现
- 《CPlusPlusPrimer》第三章编程源码——String类的简单实现
- C++ Primer Plus的string类的简单实现
- 自己动手实现一个简单的string类(一)
- string类的简单实现(写时拷贝Copy-on-write)
- c++简单实现string类
- 自己动手实现一个简单的string类(二)
- 一个string类的简单实现案例
- 引用计数型String类的简单实现
- String类简单实现(构造、拷贝构造、析构、赋值、输出、比较、字符串加、长度、子串)
- 简单的string类实现
- 自己实现简单的string类