Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by registered user 1128Erika ( 14 years ago )
#include <string.h>
class string {
private:
char* data;
int length;
public:
string() //создает пустую строку
{
length=0;
data=new char[length+1];
data[length]=0;
}
string(const char* str) //создает объект класса
{
length=0;
while (str[length])
length++;
data = new char[length +1];
for (int i=0; i<length; i++)
data[i]=str[i];
data[length]=0;
}
string(const string& str) //конструктор копирования
{
length=strlen(str);
data=new char[length+1];
for (int i=0; i<length; i++)
data[i] = str.data[i];
data[length]=0;
}
~string() //деструктор
{
if (data!=NULL)
delete [] data;
}
//!!!!
string& operator=(const string& str) //оператор присваивания
{
if (&str;==this) return *this;
if (data!=NULL)delete [] data;
length = str.length;
data=new char[length+1];
for (int i=0; i<length; i++)
data[i] = str.data[i];
//strcpy(data, str.data);
data[length]=0;
return *this;
}
operator char*() const // оператор приведения
{
return data;
}
string & operator += ( string & another) // оператор += (присобачили)
{
char *newdata = new char[length + another.length + 1];
//strcpy(newdata, data);
for (int i=0; i<length; i++)
newdata[i] = data[i];
delete [] data;
//strcpy(newdata + length, another.data);
for (int i=length; i<length+another.length; i++)
newdata[i] = another.data[i-length];
length += another.length;
data = newdata;
return *this; }
string operator + ( string & another) //оператор + (новый)
{
string result = *this;
result += another;
return result;
}
char operator[](const int i) const
{
if (i<length)
return data[i];
else
return 0;
}
char& operator[](const int i)
{
if (i<length)
return data[i];
else
return data[length+1];
}
};
#include "string.h"
#include <iostream>
int main ()
{
string s1="abc";
std::cout<<"s1=abc"<<"\n";
string s2="def";
std::cout<<"s2=def"<<"\n";
string s3(s1);//string s3(s1) // copy
std::cout<<"verification (copy) (s3=s1) s3="<<s3<<"\n";
string s4=s1+s2;
std::cout<<"verification (s4=s1+s2) s4="<<s4<<"\n";
s4+=s3;
std::cout<<"verification (s4+=s3) s4="<<s4<<"\n";
string s5;
s5 = s3;
std::cout<<"verification (assignment) (s5=s3) s5="<<s5<<"\n";
const char *x=s4;
std::cout<<"verification const x="<<x<<"\n";
char p=s1[0];
std::cout<<"verification p=s1[0]="<<p<<"\n";
s1[0]='D';
std::cout<<"verification changed s1="<<s1<<"\n";
getchar();
return 0;
}
Revise this Paste
Children: 54433