Đề tài: MyString help!?!

1. MyString help!?!

Các anh giúp em tạo class MyString với các toán tử ==,>,<,+,+=,[],=.Thanks!

2. Code:
```#include <iostream.h>
#include <stdio.h>
#include <conio.h>
class string
{
private:
char xau[50];
unsigned short sopt;
string(unsigned short s);
public:
string()
{
for(int i=0;i<50;i++)
xau[i]='\0';
sopt=0;
}
string(char*name)
{
for(int i=0;i<50;i++)
xau[i]='\0';
strcpy(xau,name);
sopt=strlen(name);
}
string(const string&a)
{
strcpy(xau,a.xau);
sopt=a.sopt;
}
void hienthi()const
{
cout<<xau<<endl;
}
string&operator=(const string&b);
const char&operator[](unsigned short n)const ;
friend string operator+(const string&a,const string&b);
friend bool operator>(const string&a,const string&b);
friend bool operator==(const string&a,const string&b);
friend ostream&operator<<(ostream&out,const string&a);
friend istream&operator>>(istream&in,string&a);
};
string&string::operator=(const string&b)
{
strcpy(xau,b.xau);
sopt=b.sopt;
return *this;
}
ostream&operator<<(ostream&out,const string&a)

{
out<<a.xau;
cout<<endl;
return out;
}
istream&operator>>(istream&in, string&a)
{

cout<<"\t\tnhap xau ";
int i=0;
if(i)
in.ignore();
in.getline(a.xau,30);
return in;
}
const char&string::operator [](unsigned short n)const
{
return xau[n];
}

string::string(unsigned short a)
{
sopt = a;
}

bool operator>(const string&a,const string&b)
{
return (strcmp(a.xau,b.xau)>0);
}
bool operator==(const string&a,const string&b)
{
return (strcmp(a.xau,b.xau)==0);
}
string operator+(const string&a,const string&b)
{
int total=a.sopt+b.sopt;
string r(total);
int i;
for(i=0;i<a.sopt;i++)
r.xau[i]=a.xau[i];
for(int j=0;j<b.sopt;j++,i++)
r.xau[i]=b.xau[j];
r.xau[total]='\0';

return r;
}```

3. string &string::operator= : lúc nào dùng dấu & lúc nào không?

const string&a,const string&b : lúc nào dùng const, lúc nào không?

4. TQN
Newbie coder
Ngày gia nhập
09 2006
Bài viết
711
char xau[50];
Lỗi nặng ở chổ này, gần như 100% sẽ bị buffer overwrite.
Vd: với constructor string(char*name);
string strTest("111111111111111111111111111....."); lớn hơn 50 character, ct sẽ bị die.
Còn nhiều lỗi #, nên test kỹ với truy xuất index, strcpy...

5. Nguyên bản được gửi bởi TQN
char xau[50];
Lỗi nặng ở chổ này, gần như 100% sẽ bị buffer overwrite.
Vd: với constructor string(char*name);
string strTest("111111111111111111111111111....."); lớn hơn 50 character, ct sẽ bị die.
Còn nhiều lỗi #, nên test kỹ với truy xuất index, strcpy...
Thật ra thì compiler đã có sẵn lớp string (#include <cstring>) nên chúng ta cứ việc sử dụng thôi. Còn bài này thì chỉ làm để hiểu rõ về lớp string thôi, chứ không dùng để ứng dụng.
Còn với char xau[50] thì em không rõ sửa thế nào nữa . Mong anh TQN chỉ bảo thêm
Đã được chỉnh sửa lần cuối bởi iamvtn : 10-10-2007 lúc 09:04 AM.

6. MyString help!?!

Nhiều thầy cô thích đánh đố học sinh nhỉ, nếu đã có 1 lớp string rồi thì tốt nhất là nên có 1 tiết học để nghiên cứu lớp string thay vì cho 1 bài tập vớ vẩn là viết lại 1 lớp string.
Đừng cố gắng chế ra cái bánh xe khi nó đã được dùng từ 10 năm trước rồi.
Thật ra thì compiler đã có sẵn lớp string (#include <cstring>)
Nếu trong C++ thì ta nên dùng lớp string (#include <string>) thay vì dùng lớp cstring. 2 lớp này khác biệt nhau hoàn toàn, nghiên cứu thêm lớp string nhé vtn.

Quyền hạn của bạn

• Bạn không thể gửi đề tài mới
• Bạn không thể gửi bài trả lời
• Bạn không thể gửi các đính kèm
• Bạn không thể chỉnh sửa bài viết của bạn