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

  • Автор темы vivkin
  • Дата начала
V

vivkin

#1
в данном файле 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';
}
 

Вложения

V

vivkin

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