老師布置的mystring的代碼
我希望在main函式里面將兩個字串相加的結果賦給一個物件
寫的建構式如下
private:
char* data;
public:
CMyString()
{
data = new char(0);
}
mian函式里面
int main()
{
CMyString s1("dasd");
CMyString s2("world");
CMyString s3;
s1.Show();
s3 = s1 + s2;
s3.Show();
最后結果是這樣

(前面有一個顯示字串長度的函式)
求大神指教
uj5u.com熱心網友回復:
完整的代碼#include<iostream>
#include<string>
using namespace std;
class CMyString
{
private:
char* data;
public:
CMyString()
{
data = new char(0);
}
CMyString(const char* buf)
{
if (buf != NULL)
{
int len = strlen(buf);
data = new char[len + 1];
strcpy(data, buf);
}
else
{
data = new char[1];
data[0] = '\0';
}
}
~CMyString()
{
delete data;
}
CMyString(CMyString& s)
{
int len = strlen(s.data);
data = new char[len + 1];
strcpy(data, s.data);
}
int length()
{
int k = 0;
while (data[k] != '\0')
k++;
cout << k << endl;
return k;
}
void Show()
{
cout << data << endl;
}
bool operator==(CMyString& x)
{
int k = 0;
while (data[k] != '\0' && x.data[k] != '\0')
k++;
return (data[k] == x.data[k]);
}
bool operator<(CMyString& x)
{
int k = 0;
while (data[k] != '\0' && x.data[k] != '\0')
k++;
return (length() < x.length());
}
CMyString operator+(CMyString& x)
{
char* q = data;
data = new char[length() + x.length() + 1];
strcpy(data, q);
strcat(data, x.data);
delete q;
return *this;
}
CMyString toUpperCase()
{
for (int i = 0; i < length(); i++)
if (data[i] >= 'a' && data[i] <= 'z')
data[i] -= 32;
return *this;
}
};
int main()
{
CMyString s1("dasd");
CMyString s2("world");
CMyString s3;
s1.Show();
s3 = s1 + s2;
s3.Show();
if (s1 == s2)
cout << "equal" << endl;
else
if (s1 < s2)
cout << "s1<s2" << endl;
else
cout << "s1>s2" << endl;
return 0;
}
uj5u.com熱心網友回復:
你的第二個建構式,也就是const char*的那個,最好可以這樣寫CMyString(const char*buf):data(buf){}這樣直接可以賦值,但是你這個data最好生成為一個陣列,我只是給你一個優化的策略,但并沒有給你錯在哪了,抱歉。
uj5u.com熱心網友回復:
他說得對
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84676.html
標籤:新手樂園
上一篇:pcl::visualization::PCLVisualizer原來的camera_成員現在變成什么了?
下一篇:C++出現葺葺葺怎么辦
