您的位置:首页 > 编程语言 > C语言/C++

C++语法下String类的简单程序

2014-10-08 18:57 344 查看
#include <stdio.h>

#include <iostream>

using namespace std;

#pragma warning(disable:4996)

#pragma warning(once:4996)

class String

{

public:

String(void); //构造函数

~String(void); //析构函数

String(char* _str); //有参构造函数

void output(); //输出成员函数

bool PushBack(char* _str); //字符串拼接函数

private:

char* data;

int lenth;

int count; //存放字符串的容量大小

};

String::String(void)

{

count = 0;

lenth = 0;

data = NULL;

}

String::~String(void)

{

//判断data指针,不为空释放指针

if (NULL != data)

{

delete data;

data = NULL;

}

}

String::String(char* _str)

{

String(); //初始化成员变量

//空字符串

if (NULL == _str)

{

return;

}

//strlen计算的是长度,但是字符串后面自动填充‘\0'

count = strlen(_str) + 1;

//申请count大小的内存空间,字符数组

data = new char[count];

if (NULL == data)

{

return;

}

//用strncpy函数实现字符串填充

strncpy(data, _str, strlen(_str));

int size = count;

data[size - 1] = '\0'; //字符填充后,最后一位补’\0'

}

bool String::PushBack(char* _str)

{

//判断内容是否为空

if ((NULL == _str) || (NULL == data))

{

return false;

}

//计算新的内存容量大小

count += strlen(_str);

//新申请一块内存

char* tmp = new char[count];

//如果申请失败,并使容量复位

if (NULL == tmp)

{

count -= strlen(_str);

return false;

}

//在新内存中放入原来的字符串

strncpy(tmp, data, strlen(data));

//然后放入传入的字符串,完成拼接

strncpy(tmp + strlen(data), _str, strlen(_str)); //tmp代表首地址,所以要加上data的长度,代表第二个字符串应该填充的首地址

tmp[count - 1] = '\0'; //使最后一个位置填充'\0'

delete data; //释放旧内存

data = tmp; //并使data指针指向新内存

return true;

}

void String::output()

{

if (NULL == data)

{

return;

}

printf("%s\n", data); //打印data指针指向的内容

}

int main()

{

String str("hello"); //创建一个String类的str对象,并传入hello

str.output(); //hello

str.PushBack("world");

str.output(); //helloworld

return 0;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: