Строковый массив в с++

Тема в разделе "C/C++/C#", создана пользователем vivkin, 17 сен 2010.

  1. vivkin

    vivkin Гость

    в данном файле 1 задание сделала..но есть ошибки..а в чем причина их-не понимаю(


    #include "stdio.h"
    #include "iostream"
    #include "string.h"

    class String
    {
    private:
    char * data;
    int lenght;

    public:
    String (void);
    String (char * x);
    String (const String &r);
    ~String (void);
    };
    //создание пустой строки
    String::String (void)
    {
    data =new char [1];
    if (!data)
    {
    std::cout << "Ошибка выделения памяти";
    exit (1);
    }
    *data = '\0';
    lenght =0;
    }
    //конструктор символьного присваиния
    String::String (char * x)
    {
    int i=0;
    while (x!='\0')
    i++;
    lenght=i;
    data =new char [lenght+1];
    for (i=0; i<= lenght; i++)
    data=x;
    data[i+1]='\0';
    }
    //конструктор копирования
    String::String (const String &r)
    {
    lenght = r.lenght;
    int j=0;
    for (int j=0; j<= lenght; j++)
    data[j]=r.data[j];
    data[lenght]='\0';
    }
    //деструктор
    String::~String (void)
    {
    if (lenght!=NULL)
    delete [] data;
    }

    //оператор присваивания
    String::String (const String &r)
    {
    lenght=r.lenght;
    data=new char[lenght+1];
    for(int i=0; i<lenght; i++)
    data=r.data;
    data[lenght]='\0';

    }
    ;
    }
    //оператор конкатинации
    String& operator+=(const String &r)
    {
    char *u;
    u=new char[lenght+1];
    strcpy(u,data);
    lenght = lenght + r.lenght;
    delete data;
    data=new char[lenght+1];
    for (int i=0;i<lenght-r.lenght;i++)
    data=u;


    for (int i=0;i<r.lenght+1;i++)
    data[lenght+i-r.lenght]=r.data;

    delete []u;
    return *this;
    };

    operator const char *() {
    return data;
    };

    char operator[](const int pos) const{
    return data[pos];
    };

    char& operator[](const int pos){
    return data[pos];
    };




    friend String operator+(const String &r,const String &q );

    };

    String operator+(const String &r,const String &q )
    {
    int lenght = q.lenght + r.lenght;
    char *dt=new char[lenght+1];
    for (int i=0;i<r.lenght;i++)
    dt=r.data;
    for (int i=0;i<q.lenght+1;i++)
    dt[r.lenght+i]=q.data;
    String nw(dt);
    delete []dt;
    return nw;
    };

    int _tmain(int argc, _TCHAR* argv[]){


    String a;
    String b("qwer");
    String t("tyuoiu");
    String s(B);
    String d=b;
    // b+=t;
    a=b+t;
    const char *mass = a;
    char q=a[3];
    a[3]='6';
    }
     

    Вложения:

    • ______.pdf
      Размер файла:
      137,6 КБ
      Просмотров:
      15
  2. vivkin

    vivkin Гость

    вот само задание..
    Каждый объект класса должен хранить значение типа char * и самостоятельно отслеживать ,какое количество памяти необходимо для хранения строки.Необходимо реализировать:
    1)конструктор по умолчанию
    2)конструктор с параметром char*
    3)конструктор копирования
    4)деструктор
    5)оператор присванивания
    6)оператор приведения к const char*
    7)тестовую программу(функцию main) проверяющую все перечисленное
    8)конкатенация двух строк: операторы + и +=
    9)проверку этих операторов
    10)обращение по индексу для варианта оператора [] : константный для чтения,возвращающий char& для изменения
    11)вставить в оба оператора отладочный вывод и продемонстрировать. в каких случаях вызывается каждый из них
     
Загрузка...

Поделиться этой страницей