Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++]работы со строками

19K
15 декабря 2007 года
Timurovic
11 / / 02.12.2006
Буду очень признателен,если кто нить поможет

написать классс для эффективной работы со строками, позволяющий форматировать и сравнивать строки, хранить в строках числовые значения и извлекать их. Для этого необходимо реализовать:
1) перегруженные операторы присваивания и конкатенации;
2) операции сравнения и приведения типов;
3) преобразования числа любого типа;
4) форматный вывод строки.
написать прогу, демонстрирующую работу с этим классом. Прога должна содержать меню, позволяющее осуществлять проверку всех функций класса.
251
15 декабря 2007 года
SkyMаn
1.7K / / 31.07.2007
На каком языке? На немецком?
320
15 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
Похожая тема была недавно.Смотри ТУТ.
19K
15 декабря 2007 года
Timurovic
11 / / 02.12.2006
Спасибо.
19K
19 декабря 2007 года
Timurovic
11 / / 02.12.2006
я вообщем попроще делаю:
Код:
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;}


но компилятор ругается еще не доделов....

[COLOR="Red"]Только код оформляй по Правилам ,при помощи тегов [ code ]....[ /code ][/COLOR]
350
19 декабря 2007 года
cheburator
589 / / 01.06.2006
Цитата: Timurovic
я вообщем попроще делаю:


А ты, прежде чем "делать попроще" (а на самом деле - заниматься изобретением колеса), все-таки почитай ссылки, которые тебе дали. А также пользуйся поиском по форуму - многие ошибки, которые в твоем коде, обсуждались (и совсем недавно). Причем, ошибки есть не только такие, которые найдет компилятор.
Также читай FAQ в разделе "Студентам".
Уж можно было хотя бы окинуть беглым взглядом список тем на первой странице...

19K
27 декабря 2007 года
Timurovic
11 / / 02.12.2006
Вот так переделал,но нужно меню реализовать...вроде сделал,но теперь конкатенация не правильно работает...и операцию присваивания нужно
Код:
#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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог