class string
{
public:
string();
char *str;
float ch;
char get_st(){return *str;}
float get_ch(){return ch;}
char operator=(char*);
double operator=(float);
char operator+(char*);
double operator+(float);
};
string::string()
{
str='\0';
ch=0;
}
char string::operator+(char *str1)
{return*(strcat(str,str1));}
double string::operator+(float ch1)
{return ch+ch1;}
char string::operator=(char *str2)
{return *(str=str2);}
double string::operator=(float ch2)
{return ch=ch2;}
char operator+(string&,char*);
double operator+(string&,float);
char operator=(string&,char*);
double operator=(string&,float);
char operator+(string&str3,char*str1)
{return *(str3.get_st()+str1);}
double operator+(string&ch3,float ch1)
{return ch3.get_ch()+ch1;}
char operator=(string&str3,char*str2)
{return*(str3.get_st()=str2);}
double operator=(string&ch3,float ch2);
{return ch3.get_ch()=ch2;}
[C++]работы со строками
написать классс для эффективной работы со строками, позволяющий форматировать и сравнивать строки, хранить в строках числовые значения и извлекать их. Для этого необходимо реализовать:
1) перегруженные операторы присваивания и конкатенации;
2) операции сравнения и приведения типов;
3) преобразования числа любого типа;
4) форматный вывод строки.
написать прогу, демонстрирующую работу с этим классом. Прога должна содержать меню, позволяющее осуществлять проверку всех функций класса.
На каком языке? На немецком?
ТУТ.
Похожая тема была недавно.Смотри
Спасибо.
Код:
но компилятор ругается еще не доделов....
[COLOR="Red"]Только код оформляй по Правилам ,при помощи тегов [ code ]....[ /code ][/COLOR]
Цитата: Timurovic
я вообщем попроще делаю:
А ты, прежде чем "делать попроще" (а на самом деле - заниматься изобретением колеса), все-таки почитай ссылки, которые тебе дали. А также пользуйся поиском по форуму - многие ошибки, которые в твоем коде, обсуждались (и совсем недавно). Причем, ошибки есть не только такие, которые найдет компилятор.
Также читай FAQ в разделе "Студентам".
Уж можно было хотя бы окинуть беглым взглядом список тем на первой странице...
Код:
#include <iostream.h>
#include <conio.h>
#include <windows.h>
char *rus(const char *ps)
{
char* bf=new char [strlen(ps)];
CharToOem(ps,bf);
return bf;
}
using namespace std;
class String
{
private:
char* S;
size_t len;
public:
String();
String(const char* s);
String(const String& s);
~String();
friend String operator+(const String&, const String&);
friend istream& operator>>(istream&, String&);
friend ostream& operator<<(ostream&, const String&);
String& operator=(const String&);
operator char*() { return S; }
void Sort(String s[], int n);
size_t GetLen() { return len; }
};
String::String()
{
S = NULL;
len = 0;
}
String::String(const char* s)
{
len = strlen(s);
S = new char[len + 1];
strcpy(S, s);
}
String::String(const String& s)
{
len = s.len;
S = new char[len + 1];
strcpy(S, s.S);
}
String::~String()
{ delete [] S;}
void String::Sort(String s[], int n)
{
bool flag = true;
String temp;
for(int j = 1; ; j++)
{
for(int i = 0; i < n - j; i++)
if(strcmp(s, s[i + 1]) > 0)
{
temp = s;
s = s[i + 1];
s[i + 1] = temp;
flag = false;
}
if(flag)
break;
flag = true;
}
}
String operator+(const String &str1, const String &str2)
{
String s;
s.len = str1.len + str2.len;
s.S = new char[s.len + 1];
strcpy(s.S, str1.S);
strcat(s.S, str2.S);
return s;
}
istream& operator>>(istream& is, String& str)
{
const int N = 256;
char temp[N] = {0};
size_t Length = 0,
Total = 0;
do
{
is.getline(temp + Total, N - Total);
Length = strlen(temp + Total);
if(Length == 0)
break;
Total += Length + 1;
temp[Total - 1] = '\n';
} while(Total < N);
temp[Total - 1] = 0;
str = temp;
return is;
}
ostream& operator<<(ostream& os, const String& str)
{
os << str.S;
return os;
}
String& String::operator=(const String &str)
{
if(this == &str)
return *this;
if(len != str.len || len == 0)
{
delete [] S;
len = str.len;
S = new char[len + 1];
}
strcpy(S, str.S);
return *this;
}
int main(int argc, _TCHAR* argv[])
{
String a, b, c;
int k,v;
cout<<rus("Выберите тип данных:")<<endl;
cout<<rus("1)строки")<<'\n'<<rus("2)числа")<<endl;
cin>>k;
if(k<-1 || k>2){cout<<rus("Ошибка!!!")<<endl; getch(); return 0;}
clrscr();
cout<<rus("Выберите опрацию:")<<endl;
cout<<rus("1)присваивания")<<'\n'<<rus("2)конкатенация")<<endl;
cin>>v;
switch(v)
{
case 1:
break;
case 2:
cout <<'\t'<<'\t'<<'\t'<< rus("операция конкатенация:")<<endl;
cout << rus("Введите первую часть строки:\n");
cin >> a;
getch();
cout << rus("Введите вторую часть строки:\n");
cin >> b;
c = a+b;
cout << rus("Результат:\n")<<c;
break;
default: cout<<rus("Ошибка!")<<endl;
}
getch();
return 0;
}
#include <conio.h>
#include <windows.h>
char *rus(const char *ps)
{
char* bf=new char [strlen(ps)];
CharToOem(ps,bf);
return bf;
}
using namespace std;
class String
{
private:
char* S;
size_t len;
public:
String();
String(const char* s);
String(const String& s);
~String();
friend String operator+(const String&, const String&);
friend istream& operator>>(istream&, String&);
friend ostream& operator<<(ostream&, const String&);
String& operator=(const String&);
operator char*() { return S; }
void Sort(String s[], int n);
size_t GetLen() { return len; }
};
String::String()
{
S = NULL;
len = 0;
}
String::String(const char* s)
{
len = strlen(s);
S = new char[len + 1];
strcpy(S, s);
}
String::String(const String& s)
{
len = s.len;
S = new char[len + 1];
strcpy(S, s.S);
}
String::~String()
{ delete [] S;}
void String::Sort(String s[], int n)
{
bool flag = true;
String temp;
for(int j = 1; ; j++)
{
for(int i = 0; i < n - j; i++)
if(strcmp(s, s[i + 1]) > 0)
{
temp = s;
s = s[i + 1];
s[i + 1] = temp;
flag = false;
}
if(flag)
break;
flag = true;
}
}
String operator+(const String &str1, const String &str2)
{
String s;
s.len = str1.len + str2.len;
s.S = new char[s.len + 1];
strcpy(s.S, str1.S);
strcat(s.S, str2.S);
return s;
}
istream& operator>>(istream& is, String& str)
{
const int N = 256;
char temp[N] = {0};
size_t Length = 0,
Total = 0;
do
{
is.getline(temp + Total, N - Total);
Length = strlen(temp + Total);
if(Length == 0)
break;
Total += Length + 1;
temp[Total - 1] = '\n';
} while(Total < N);
temp[Total - 1] = 0;
str = temp;
return is;
}
ostream& operator<<(ostream& os, const String& str)
{
os << str.S;
return os;
}
String& String::operator=(const String &str)
{
if(this == &str)
return *this;
if(len != str.len || len == 0)
{
delete [] S;
len = str.len;
S = new char[len + 1];
}
strcpy(S, str.S);
return *this;
}
int main(int argc, _TCHAR* argv[])
{
String a, b, c;
int k,v;
cout<<rus("Выберите тип данных:")<<endl;
cout<<rus("1)строки")<<'\n'<<rus("2)числа")<<endl;
cin>>k;
if(k<-1 || k>2){cout<<rus("Ошибка!!!")<<endl; getch(); return 0;}
clrscr();
cout<<rus("Выберите опрацию:")<<endl;
cout<<rus("1)присваивания")<<'\n'<<rus("2)конкатенация")<<endl;
cin>>v;
switch(v)
{
case 1:
break;
case 2:
cout <<'\t'<<'\t'<<'\t'<< rus("операция конкатенация:")<<endl;
cout << rus("Введите первую часть строки:\n");
cin >> a;
getch();
cout << rus("Введите вторую часть строки:\n");
cin >> b;
c = a+b;
cout << rus("Результат:\n")<<c;
break;
default: cout<<rus("Ошибка!")<<endl;
}
getch();
return 0;
}