C++ 构造函数和析构函数题目 190
classCString{char*m_pbuff;//指向字符串的指针intm_length;//表示当前字符串的最大允许长度,也就是字符数组的长度public:CSt...
class CString
{
char * m_pbuff; //指向字符串的指针
int m_length;//表示当前字符串的最大允许长度,也就是字符数组的长度
public:
CString(); //构造函数1,设置为空字符串,m_length=100
CString(char *src); //构造函数2,在考虑了src的长度后初始化当前对象,m_length>=src的长度+1
CString(char ch); //构造函数3,0号元素赋值为ch,m_length=100
int SetString(char *src); //设置字符串,在考虑了src的长度后设置当前对象,m_length>=src的长度+1
void trim();// 去除字符串最前和最后的空格
int find(char ch); //查找字符串中的指定字符的第一次出现位置,如果未出现返回-1
void toLower();//字符串转小写
void toUpper();//字符串转大写
void deletechar(char ch); // 删除其中的指定字符
void show();
};
请编写程序实现如下功能:
为其中的每个成员函数给出实现代码;
自行根据需要决定是否需要添加拷贝构造函数和析构函数;
main 函数要求如下,不允许修改:
void main()
{
CString s1;
s1,show();
s1.setString("abc1");
s1,show();
CString s2("abc2");
s2,show();
CString s3('a');
s3,show();
CString s4(s2);
s4,show();
//下面自行添加必要的测试函数
}
前半部分自己会了,但是对于后半部分却不知道怎么做,尤其是main函数中 s1,show()这种语句,希望大神能完成本题,并解答疑惑!
题目中打错了,不是逗号,是 .
求大神能完成此题 展开
{
char * m_pbuff; //指向字符串的指针
int m_length;//表示当前字符串的最大允许长度,也就是字符数组的长度
public:
CString(); //构造函数1,设置为空字符串,m_length=100
CString(char *src); //构造函数2,在考虑了src的长度后初始化当前对象,m_length>=src的长度+1
CString(char ch); //构造函数3,0号元素赋值为ch,m_length=100
int SetString(char *src); //设置字符串,在考虑了src的长度后设置当前对象,m_length>=src的长度+1
void trim();// 去除字符串最前和最后的空格
int find(char ch); //查找字符串中的指定字符的第一次出现位置,如果未出现返回-1
void toLower();//字符串转小写
void toUpper();//字符串转大写
void deletechar(char ch); // 删除其中的指定字符
void show();
};
请编写程序实现如下功能:
为其中的每个成员函数给出实现代码;
自行根据需要决定是否需要添加拷贝构造函数和析构函数;
main 函数要求如下,不允许修改:
void main()
{
CString s1;
s1,show();
s1.setString("abc1");
s1,show();
CString s2("abc2");
s2,show();
CString s3('a');
s3,show();
CString s4(s2);
s4,show();
//下面自行添加必要的测试函数
}
前半部分自己会了,但是对于后半部分却不知道怎么做,尤其是main函数中 s1,show()这种语句,希望大神能完成本题,并解答疑惑!
题目中打错了,不是逗号,是 .
求大神能完成此题 展开
2个回答
展开全部
class CString
{
private:
char * m_pbuff; //指向字符串的指针
int m_length;//表示当前字符串的最大允许长度,也就是字符数组的长度
public:
~CString();//析构
CString(); //构造函数1,设置为空字符串,m_length=100
CString(CString &); //拷贝构造
CString(char *src); //构造函数2,在考虑了src的长度后初始化当前对象,m_length>=src的长度+1
CString(char ch); //构造函数3,0号元素赋值为ch,m_length=100
int SetString(char *src); //设置字符串,在考虑了src的长度后设置当前对象,m_length>=src的长度+1
void trim();// 去除字符串最前和最后的空格
int find(char ch); //查找字符串中的指定字符的第一次出现位置,如果未出现返回-1
void toLower();//字符串转小写
void toUpper();//字符串转大写
void deletechar(char ch); // 删除其中的指定字符
void show();
private:
void freeBuff();
};
void CString::freeBuff()
{
if(m_pbuff != 0)
{
delete []m_pbuff;
m_pbuff = 0;
}
}
CString::CString()
{
m_pbuff = new char[100];
m_length = 100;
m_pbuff[0] = 0;
}
CString::CString(CString &ref)
{
if(ref.m_length > 0)
{
m_length = ref.m_length;
m_pbuff = new char[m_length];
memcpy(m_pbuff,ref.m_pbuff,m_length);
}
else
{
m_pbuff = 0;
m_length = 0;
}
}
CString::CString(char *src)
{
m_length = src?strlen(src)+1:0;
if(m_length == 0)
m_pbuff = 0;
else
{
m_pbuff = new char[m_length];
memcpy(m_pbuff,src,m_length);
}
}
CString::CString(char ch)
{
m_length = 100;
m_pbuff = new char[m_length];
m_pbuff[0] = ch;
m_pbuff[1] = 0;
}
int CString::SetString(char *src)
{
freeBuff();
m_length = src?strlen(src)+1:0;
if(m_length == 0)
m_pbuff = 0;
else
{
m_pbuff = new char[m_length];
memcpy(m_pbuff,src,m_length);
}
}
void CString::trim()
{
int i,j=m_length;
for(i=0;i<m_length;++i)
{
if(m_pbuff[i] != ' ' || m_pbuff[i] == 0)
break;
}
//跳过\0字符后面的所有字符
while(m_pbuff[--j] != 0);
while(j>0 && m_pbuff[j-1] == ' ')
--j;
m_pbuff[j] = 0;
m_length = j-i;
if(m_length == 0)
freeBuff();
else
{
m_length += 1;
char *p = new char[m_length];
memcpy(p,m_pbuff+i,m_length);
freeBuff();
m_pbuff = p;
}
}
int CString::find(char ch)
{
for(int i=0;i<m_length;++i)
{
if(m_pbuff[i] == 0)
return -1;
if(m_pbuff[i] == ch)
return i;
}
return -1;
}
void CString::toLower()
{
for(int i=0;i<m_length && m_pbuff[i] != 0;++i)
{
if(m_pbuff[i] >= 'A' && m_pbuff[i] <= 'Z')
m_pbuff += 32;
}
}
void CString::toUpper()
{
for(int i=0;i<m_length && m_pbuff[i] != 0;++i)
{
if(m_pbuff[i] >= 'a' && m_pbuff[i] <= 'z')
m_pbuff -= 32;
}
}
void CString::deletechar(char ch)
{
if(m_length == 0)
return;
char *p = new char[m_length];
for(int i=0,j=0;i<m_length && m_pbuff[i] != 0;++i)
{
if(m_pbuff[i] != ch)
p[j++] = m_pbuff[i];
}
p[j] = 0;
freeBuff();
m_pbuff = p;
}
void CString::show()
{
if(m_length > 0 && m_pbuff[0] != 0)
printf(m_pbuff);
}
以上代码均为NOTEPAD++手敲,请自行测试。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询