string类的实现
来源:互联网 发布:软件的摊销年限 编辑:程序博客网 时间:2024/06/06 08:43
面试题目,好久没写代码,写下了下面的代码:
#pragma once
class AString
{
public:
AString(const char* pInput = NULL);
~AString(void);
AString(const AString &OtherString);//拷贝构造函数,开始没有想起
AString operator+(const AString &OtherString);
AString operator=(const AString &OtherString);
bool operator==(AString &OtherString);
int AstrLen(AString &InputString);
private:
char* m_pData;
};
#include "StdAfx.h"
#include "AString.h"
AString::AString(const char* pInput)
{
if(!pInput)
{
int nSize = 0;
char* p = (char*)pInput;
while(p++)
nSize++;
m_pData = new char[nSize+1];
strcpy(m_pData,pInput);
}
else
{
m_pData = NULL;
}
}
AString::~AString(void)
{
if(NULL != m_pData)
{
delete[] m_pData;
m_pData = NULL;
}
}
AString::AString(const AString &OtherString)
{
if(NULL != OtherString)
{
stcpy(m_pData,OtherString->m_pData);
}
}
AString AString::operator+(const AString &OtherString)
{
if(OtherString->m_pData != NULL)
{
int nSize = strlen(OtherString->m_pData)+strlen(m_pData);
char tmpChar = new char[nSize];
stcpy(tmpChar,m_pData);
stcat(tmpChar,OtherString->m_pData);
AString tmpStr = new AString(const char*(tmpChar));
return tmpSrt;
}
else
{
return *this;
}
}
AString AString::operator=(const AString &OtherString)
{
if(OtherString->m_pData != NULL)
{
delete []m_pData;
int nSize = strlen(OtherString->m_pData);
char *tmpChar = new char[nSize];
stcpy(tmpChar,m_pData);
m_pData = tmpChar;
return *this;
}
else
{
return *this;
}
}
int AString::AstrLen(AString &InputString)
{
int nTmp = 0;
if(NULL == InputString)
{
return 0;
}
char*p = InputString->m_pData;
while('\0' != *p++)
{
nTmp++;
}
return nTmp;
//下面即可
return strlen(m_data);
}
下面是修改加注释
#pragma once
//应该加上下面三行
#include<iostream>
#include<iomanip>
using namespace std;
class AString
{
public:
AString(const char* pInput = NULL); //赋值构造兼默认构造函数(char)
~AString(void);
AString(const AString &OtherString); //赋值构造函数(String)
AString operator+(const AString &OtherString);
AString& operator=(const AString &OtherString);//返回值应该是AString&,而不是AString
bool operator==(AString &OtherString);//应改为bool operator==(const AString &OtherString);
int AstrLen(AString &InputString);//改为size_t size(){return strle(m_pData):}
private:
char* m_pData;
};
#include "StdAfx.h"
#include "AString.h"
AString::AString(const char* pInput) //应该改为inline AString::AString(const char* pInput)
{
//声明为inline函数,则该函数在程序中被执行时是语句直接替换,而不是被调用
if(pInput)
{
int nSize = 0;
char* p = (char*)pInput;
while(p++)
nSize++;
m_pData = new char[nSize+1];//可以直接改为m_pData = new char[strlen(pInput)+1];
strcpy(m_pData,pInput);
}
else
{
m_pData = NULL;
}
}
AString::~AString(void)
{
if(NULL != m_pData)
{
delete []m_pData;
m_pData = NULL;
}
}
AString::AString(const AString &OtherString)//应该改为inline AString::AString(const AString &OtherString)
{
if(NULL != OtherString)
{
if(NULL != m_pData)
{
delete m_pData;
m_pData = NULL;
}
m_pData =new char[strlen(OtherString.m_pData)+1];
stcpy(m_pData,OtherString->m_pData);
}
}
AString AString::operator+(const AString &OtherString)//前面应该加inline
{
if(OtherString->m_pData != NULL)
{
int nSize = strlen(OtherString->m_pData)+strlen(m_pData);
char tmpChar = new char[nSize];
stcpy(tmpChar,m_pData);
stcat(tmpChar,OtherString->m_pData);
AString tmpStr = new AString(const char*(tmpChar));
return tmpSrt;
}
else
{
return *this;
}
//应改为下面
- String newString;
- if(!other.m_data)
- newString = *this;
- else if(!m_data)
- newString = other;
- else
- {
- newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1];
- strcpy(newString.m_data,m_data);
- strcat(newString.m_data,other.m_data);
- }
- return newString;
}
AString AString::operator=(const AString &OtherString) //前面应该加inline
{
if(OtherString->m_pData != NULL)
{
delete []m_pData;
int nSize = strlen(OtherString->m_pData);
char *tmpChar = new char[nSize];
stcpy(tmpChar,m_pData);
m_pData = tmpChar;
return *this;
}
else
{
return *this;
}
//应该改为下面
- if (this!=&other)
- {
- delete[] m_data;
- if(!other.m_data) m_data=0;
- else
- {
- m_data = new char[strlen(other.m_data)+1];
- strcpy(m_data,other.m_data);
- }
- }
- return *this;
}
int AString::AstrLen(AString &InputString)
{
int nTmp = 0;
if(NULL == InputString)
{
return 0;
}
char*p = InputString->m_pData;
while('\0' != *p++)
{
nTmp++;
}
return nTmp;
}
- string类的实现
- String类的实现
- String类的实现
- String类的实现
- String 类的实现
- String类的实现
- string类的实现
- String类的实现
- String类的实现
- string类的实现
- string类的实现
- string类的实现
- string类的实现
- string类的实现
- string类的实现
- String 类的实现
- String类的实现
- String类的实现
- bzoj 3262 陌上花开
- 第九章 特殊方法,属性和迭代器
- Eclipse报错no opencv_java249 in java.library.path解决方法
- Mysql
- OSG学习
- string类的实现
- 纯虚函数和抽象类
- c语言程序设计(3)
- CodeForces
- redis中的事务、lua脚本和管道的使用场景
- GDI继Graphics的学习2
- 【leetcode】clone-graph
- Mac下搭建Go语言开发环境详解(步骤配图)
- Pandas学习笔记