Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/54: Рейтинг темы: голосов - 54, средняя оценка - 4.83
Niklepas
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
1

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

29.09.2012, 06:57. Просмотров 10140. Ответов 10
Метки нет (Все метки)

Здравствуйте! я бы хотел попросить помочь в решении задачи:
Разработать класс String – строка символов. Реализовать операции присваивания, конкатенецию (слияние двух строк), сравнения строк (==, !=), метод вывода объекта на экран. Размер строки дина-мически увеличивается в процессе работы со строкой по мере необходимости.
Фишка в том что все методы в классе необходимо реализовать с помощью перегрузки функций.
заранее всем спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2012, 06:57
Ответы с готовыми решениями:

Разработать класс String
Разработать класс String определив для него методы: • копирования строк,...

Разработать класс String
Разработка класса строка Задание Разработать класс String определив для...

Динамическая строка, класс String
Общая постановка. Пользовательский класс String должен содержать необходимые...

Разработать класс String для работы со строками
разработать класс String для работы со строками. Класс должен содержать контср...

Разработать класс String для работы со строками
Разработать программу, демонстрирующую работу с производным от приведенного в...

10
yekka
386 / 150 / 16
Регистрация: 12.05.2011
Сообщений: 450
29.09.2012, 11:53 2
C++
1
typedef std::string String;
Вуаля!
1
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
29.09.2012, 17:21 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;
}
И т.д.
В чем собственно проблемма ?
1
Niklepas
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
30.09.2012, 00:35  [ТС] 4
Всем большое спасибо, а m1Rror отдельное.
Но я хотел бы узнать по конкретней, правильно ли я понимаю что перегрузку оператора мы используем в данной части кода?
friend ostream &operator << (ostream &os, String &obj) {
for(int i = 0; i < obj.size(); i++)
os <<obj.pStr[i];
return os;
0
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
30.09.2012, 00:57 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
да именно сдесь перегрузка оператора вывода в поток, могу помочь с остальными, только вопросов как я вижу не предвидится...
0
Niklepas
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
30.09.2012, 01:07  [ТС] 6
ну если не сложно, на пальцах объяснить, что подразумевается под методом вывода объекта на экран? то есть необходимо реализовать это в классе как функцию?
0
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
30.09.2012, 04:29 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;
    }
};
Вот еще чуток.
0
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.09.2012, 07:58 8
m1Rr0r, а теперь
C++
1
2
String s1;
s1 = String();
И наслаждаемся чудесным видом Segmentation Fault.
1
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
30.09.2012, 11:38 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);
        }
так вылечить можно ?:
0
yekka
386 / 150 / 16
Регистрация: 12.05.2011
Сообщений: 450
30.09.2012, 13:54 10
Цитата Сообщение от m1Rr0r Посмотреть сообщение
так вылечить можно ?:
нужен operator=,
дефолтный оператор присваивания здесь явно не подходит
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.09.2012, 14:00 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)
1
30.09.2012, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2012, 14:00

Разработать класс String для работы со строками
/*Разработать класс String для работы со строками. Класс должен содержать: -...

Разработать класс String определив для него методы
Разработать класс String определив для него методы: • копирования строк,...

Разработать класс String определив для него методы
Нужно разработать класс String определив для него методы: • копирования строк,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru