Форум программистов, компьютерный форум CyberForum.ru

Разработать класс String – строка символов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.78
Niklepas
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
29.09.2012, 06:57     Разработать класс String – строка символов #1
Здравствуйте! я бы хотел попросить помочь в решении задачи:
Разработать класс String – строка символов. Реализовать операции присваивания, конкатенецию (слияние двух строк), сравнения строк (==, !=), метод вывода объекта на экран. Размер строки дина-мически увеличивается в процессе работы со строкой по мере необходимости.
Фишка в том что все методы в классе необходимо реализовать с помощью перегрузки функций.
заранее всем спасибо!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
29.09.2012, 11:53     Разработать класс String – строка символов #2
C++
1
typedef std::string String;
Вуаля!
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
29.09.2012, 17:21     Разработать класс String – строка символов #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
using namespace std;
 
class String  {
private:
    char *pStr;
    int _size;
public:
    String()  {
        pStr = NULL;
        _size = 0;
    }
    String(char *str)  {
        _size = strlen(str) + 1;
        pStr = new char[_size];
        strcpy(pStr, str);
    }
    int size()  {
        return _size;
    }
    ~String()  {
        delete []pStr;
    }
    friend ostream &operator << (ostream &os, String &obj)  {
        for(int i = 0; i < obj.size(); i++)
            os <<obj.pStr[i];
        return os;
    }
};
 
int main(int argc, char *argv[])  {
    String str("Blablabla");
    cout << str;
    return 0;
}
И т.д.
В чем собственно проблемма ?
Niklepas
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
30.09.2012, 00:35  [ТС]     Разработать класс String – строка символов #4
Всем большое спасибо, а m1Rror отдельное.
Но я хотел бы узнать по конкретней, правильно ли я понимаю что перегрузку оператора мы используем в данной части кода?
friend ostream &operator << (ostream &os, String &obj) {
for(int i = 0; i < obj.size(); i++)
os <<obj.pStr[i];
return os;
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
30.09.2012, 00:57     Разработать класс String – строка символов #5
Цитата Сообщение от Niklepas Посмотреть сообщение
friend ostream &operator << (ostream &os, String &obj) {
for(int i = 0; i < obj.size(); i++)
os <<obj.pStr[i];
return os;
это для того чтобы наш самописный string выводился в поток cout
да именно сдесь перегрузка оператора вывода в поток, могу помочь с остальными, только вопросов как я вижу не предвидится...
Niklepas
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
30.09.2012, 01:07  [ТС]     Разработать класс String – строка символов #6
ну если не сложно, на пальцах объяснить, что подразумевается под методом вывода объекта на экран? то есть необходимо реализовать это в классе как функцию?
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
30.09.2012, 04:29     Разработать класс String – строка символов #7
Цитата Сообщение от Niklepas Посмотреть сообщение
ну если не сложно, на пальцах объяснить, что подразумевается под методом вывода объекта на экран? то есть необходимо реализовать это в классе как функцию?
это значит для твоего класса описать функцию которая будет показывать внутренности твоего класса...

Добавлено через 2 часа 29 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class String  {
private:
    char *pStr;
    int _size;
public:
    String()  {
        pStr = NULL;
        _size = 0;
        //cout << "Constr " << this << endl;
    }
    String(char *str)  {
        _size = strlen(str);
        pStr = new char[_size + 1];
        strcpy(pStr, str);
        //cout << "Constr " << this << endl;
    }
    String(const String &obj)  {
        _size = obj._size;
        pStr = new char[_size + 1];
        strcpy(pStr, obj.pStr);
        //cout << "Copy " << this << endl;
    }
    ~String()  {
        delete []pStr;
        //cout << "Destr " << this << endl;
    }
    int size()  {
        return _size;
    }
 
    String operator + (const String &obj)  {
        char *temp = new char[_size + obj._size + 1];
        strcpy(temp, this->pStr);
        strcat(temp, obj.pStr);
        String result(temp);
        delete []temp;
        return result;
    }
    String operator + (const char c)  {
        int t_size;
        if(_size != 0)
            t_size = this->_size + 2;
        else
            t_size = 2;
        char *temp = new char[t_size];
        if(pStr)
            strcpy(temp, this->pStr);
        temp[t_size - 2] = c;
        temp[t_size - 1] = '\0';
        String result(temp);
        delete []temp;
        return result;
    }
    /*operator char*()  {
        return pStr;
    }*/
    String &operator = (const String &obj)  {
        if(&obj == this)
            return *this;
        delete []pStr;
        _size = obj._size;
        pStr = new char[_size + 1];
        strcpy(pStr, obj.pStr);
        return *this;
    }
    friend istream &operator >> (istream &is, String &obj)  {
        int ios_size = 0;
        is.sync();
        String temp;
        while(is.peek() != 10)  {
            temp = temp + (char)is.get();
            ios_size++;
        }       
        delete []obj.pStr;
        obj._size = temp._size;
        obj.pStr = new char[obj._size];
        obj = temp;
        return is;
    }
    friend ostream &operator << (ostream &os, String &obj)  {
        for(int i = 0; i < obj.size(); i++)
            os <<obj.pStr[i];
        return os;
    }
};
Вот еще чуток.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.09.2012, 07:58     Разработать класс String – строка символов #8
m1Rr0r, а теперь
C++
1
2
String s1;
s1 = String();
И наслаждаемся чудесным видом Segmentation Fault.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
30.09.2012, 11:38     Разработать класс String – строка символов #9
Цитата Сообщение от soon Посмотреть сообщение
m1Rr0r, а теперь
Код C++
1
2
String s1;
s1 = String();
И наслаждаемся чудесным видом Segmentation Fault.
C++
1
2
3
4
if(_size)  {
        pStr = new char[_size + 1];
        strcpy(pStr, obj.pStr);
        }
так вылечить можно ?:
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
30.09.2012, 13:54     Разработать класс String – строка символов #10
Цитата Сообщение от m1Rr0r Посмотреть сообщение
так вылечить можно ?:
нужен operator=,
дефолтный оператор присваивания здесь явно не подходит
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2012, 14:00     Разработать класс String – строка символов
Еще ссылки по теме:

Разработать класс String, который в дальнейшем будет использоваться для работы со строками C++
C++ Реализовать класс Строка (String) для хранения и выполнения операций над строкой
Класс, в котором в качестве данных используются строка символов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.09.2012, 14:00     Разработать класс String – строка символов #11
Цитата Сообщение от soon Посмотреть сообщение
И наслаждаемся чудесным видом Segmentation Fault.
Цитата Сообщение от yekka Посмотреть сообщение
нужен operator=,
дефолтный оператор присваивания здесь явно не подходит
ну так строка 57 в посте № 7, или что ещё имел ввиду soon?

m1Rr0r,
правильнее было бы так
C++
1
String(const char *str)
C++
1
String operator + (const String &obj) const
C++
1
String operator + (char c) const
C++
1
friend ostream &operator << (ostream &os, const String &obj)
Yandex
Объявления
30.09.2012, 14:00     Разработать класс String – строка символов
Ответ Создать тему
Опции темы

Текущее время: 16:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru