基于char*设计一个字符串类MyString

简介: 基于char*设计一个字符串类MyString

基于char * 设计一个字符串类MyString,并且具有构造函数、析构函数、拷贝构造函数,重载运算符“+”,“=”。


myString.h
#ifndef __MYSTRING_H__
#define __MYSTRING_H__
#include <iostream>
using namespace std;
class MyString
{
    public:
        MyString();
        MyString(const char *_str);
        MyString(const MyString &_str);
        ~MyString();
    public:
        const MyString operator +(const MyString &_str);
        void operator =(const MyString &_str);  
    public:
        friend istream & operator >>(istream &_in, MyString &_str);
        friend ostream & operator <<(ostream &_out, MyString &_str);
    private:
        char *str;
        int length;
};
#endif


myString.cpp


#include <iostream>
#include <string.h>
#include "myString.h"
using namespace std;
//constructor & destructor
MyString::MyString()
{
    str = new char;
    str[0] = '\0';
    length = 0;
}
MyString::MyString(const char *_str)
{
    length = strlen(_str);
    str = new char[length + 1]; 
    str[length] = '\0';
    strncpy(str, _str, length+1);
}
MyString::MyString(const MyString &_str)
{
    length = _str.length;
    str = new char[length + 1]; 
    str[length] = '\0';
    strncpy(str, _str.str, length+1);
    //cout << str << endl;
}
MyString::~MyString(){}
//operator
const MyString MyString::operator +(const MyString &_str)
{
    int newLength = length + _str.length;
    char * newStr = new char[newLength + 1]; 
    newStr[newLength] = '\0';
    strncpy(newStr, str, length);
    strncat(newStr, _str.str, _str.length);
    return MyString(newStr);
}
void MyString::operator =(const MyString &_str)
{
    str = _str.str;
    length = _str.length;
}
//friend
istream & operator >>(istream &_in, MyString &_str)
{
    _in >> _str.str;
    _str.length = strlen(_str.str);
    return _in;
}
ostream & operator <<(ostream &_out, MyString &_str)
{
    _out << _str.str << endl << "length: " << _str.length;
    return _out;
}


main.cpp


#include <iostream>
#include "myString.h"
using namespace std;
int main()
{
    MyString mStr;
    MyString mStr_0(mStr);
    MyString mStr_1("Hello");
    MyString mStr_2("World");
    cout << "mStr: " << mStr << endl;
    cout << "mStr_0: " << mStr_0 << endl;
    cout << "mStr_1: " << mStr_1 << endl;
    cout << "mStr_2: " << mStr_2 << endl;
    cout << "____________________" << endl;
    mStr_0 = mStr_1;
    mStr = mStr_1 + mStr_2;
    cout << mStr << endl;
    cout << mStr_0 << endl;
    return 0;
}


输出:


mStr: 
length: 0
mStr_0: 
length: 0
mStr_1: Hello
length: 5
mStr_2: World
length: 5
____________________
Hello
length: 5
HelloWorld
length: 10


相关文章
|
关系型数据库 PostgreSQL
PostgreSQL 计算字符串字符数函数(CHAR_LENGTH(str))和字符串长度函数(LENGTH(str))
PostgreSQL 计算字符串字符数函数(CHAR_LENGTH(str))和字符串长度函数(LENGTH(str))
2062 0
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
|
6月前
|
存储
char**传参,获取函数内申请的字符串,外部释放
char**传参,获取函数内申请的字符串,外部释放
93 0
|
存储 关系型数据库 MySQL
MySql 字符串类型 - char、varchar
MySql 字符串类型 - char、varchar
155 0
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
编写一个程序,链接两个字符串字面常量,将结果保存在一个动态分配的char数组中,重写这个程序,连接两个标准string对象
|
存储 测试技术 C语言
C语言中字符串之间的比较【char*】/【string】
C语言中字符串之间的比较【char*】/【string】
1228 0
C语言中字符串之间的比较【char*】/【string】
字符串String截取字符char
字符串String截取字符char
132 0
字符串String截取字符char
编写一个函数reverse_string(char*string),实现将参数字符串中的倒叙 如 char arr[]=“abcdef“变为“fedcba“
编写一个函数reverse_string(char*string),实现将参数字符串中的倒叙 如 char arr[]=“abcdef“变为“fedcba“
176 0
编写一个函数reverse_string(char*string),实现将参数字符串中的倒叙 如 char arr[]=“abcdef“变为“fedcba“
【输出亲朋字符串】char字符对应的ASCII码值
【输出亲朋字符串】char字符对应的ASCII码值
156 0