Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: MyString help!?!

  1. #1
    Ngày gia nhập
    09 2007
    Bài viết
    8

    Mặc định MyString help!?!

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

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    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. #3
    Ngày gia nhập
    09 2007
    Bài viết
    8

    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. #4
    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. #5
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Trích dẫn Nguyên bản được gửi bởi TQN Xem bài viết
    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. #6
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Mặc định MyString help!?!

    Nhiều thầy cô thích đánh đố học sinh nhỉ, nếu đã có 1 lớp string rồi thì tốt nhất là nên có 1 tiết học để nghiên cứu lớp string thay vì cho 1 bài tập vớ vẩn là viết lại 1 lớp string.
    Đừng cố gắng chế ra cái bánh xe khi nó đã được dù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++ thì ta nên dùng lớp string (#include <string>) thay vì dùng lớp cstring. 2 lớp này khác biệt nhau hoàn toàn, nghiên cứu thêm lớp string nhé vtn.

Các đề tài tương tự

  1. Xây dựng cấu trúc dữ liệu MyString theo phương pháp dùng chiều dài cố định
    Gửi bởi kienkilobai trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 06-04-2011, 10:26 PM
  2. Xây dựng lớp MYSTRING với các thuộc tính và phương thức liên quan!
    Gửi bởi leonard0409 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 12-11-2010, 08:52 PM
  3. Chuyến 1 chuổi kiểu MyString thành kiểu char
    Gửi bởi Quách Phẩm Siêu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 13-04-2009, 02:57 PM

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