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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Виталя97
2 / 2 / 2
Регистрация: 04.05.2015
Сообщений: 93
#1

Разработать класс String, который в дальнейшем будет использоваться для работы со строками - C++

11.10.2015, 19:09. Просмотров 688. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток!

Вот задание:

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

- конструктор по умолчанию, позволяющий создать строку длиной 80 символов;
- конструктор, позволяющий создавать строку произвольного размера;
- конструктор, который создаёт строку и инициализирует её строкой, полученной от пользователя;
- конструктор копирования.

+ код так как я начал делать:

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
#include <iostream>
#include <string>
using namespace std;
 
class string_                                                               
{
private:
    char *strings;                                                              
    int len;                                                            
public:
    string_()                                                           
    {
        len = 81;                                                       
        strings = new char[len];
        strcpy(strings, strings);
    }
    string_(int len)                                                    
    {
        strings = new char[len + 1];
        strcpy(strings, strings);
    }
    string_(const char* string)                                             
    {
        strings = new char[strlen(strings) + 1];
        strcpy(strings, string);
    }
    string_(const string_ &news)                                            
    {
        strings = new char[strlen(strings) + 1];
        strcpy(strings, news.strings);
    }
    ~string_()                                                          
    {
        delete[] strings;
    }   
 
    string_& operator + (const string_& right)
    {
        string_ result(strcat(strings, right.strings));
        return *this;
    }
 
    friend istream& operator >> (istream& stream, string_& orig);
    friend ostream& operator << (ostream& stream, const string_& orig);
};
 
istream& operator >> (istream& stream, string_& orig)
{
    stream >> orig.strings;
    return stream;
}
 
ostream& operator << (ostream& stream, const string_& orig)
{
    stream << orig.strings;
    return stream;
}
 
int main()
{
    string_ string1, string2(80);                                                   
    
    cout << "Enter string 1: ";
    cin >> string1;
 
    cout << "Enter string 2: ";
    cin >> string2;
 
    cout << string1 << " + " << string2;
    string1 + string2;
    cout << " = " << string1 << endl; 
 
    return 0;
}
Такая проблема, когда я ввожу две строки по 80 символов выбивает ошибку.

Я понимаю что strcat записывает результат складывания двух строк в первую строку, где у меня эта строка на 80 символов, а при складывании строк она должна равняться 160 символов.

Как это сделать чтобы оно нормально складывало строки?

Исправьте пожалуйста код так как нужно. Буду вам очень благодарен.

Добавлено через 2 часа 40 минут
Помогите.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2015, 19:09     Разработать класс String, который в дальнейшем будет использоваться для работы со строками
Посмотрите здесь:
Разработать класс String, который в дальнейшем будет использоваться для работы со строками C++
Разработать класс String, который в дальнейшем будет использоваться для работы со строками. C++
C++ Разработать класс String для работы со строками
Разработать класс String для работы со строками C++
Создайте класс String для работы со строками C++
C++ Создать класс для работы сo строками
C++ Реализовать класс для работы со строками
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5120 / 4440 / 1480
Регистрация: 14.04.2014
Сообщений: 17,614
11.10.2015, 19:21     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #2
Строки 15, 25 заменить на:
C++
1
*strings = '\0';
Сложение:
C++
1
2
3
4
5
6
7
    string_ operator + (const string_& right)
    {
        char *s = new char[len + right.len + 1];
        string_ result(strcat(strcpy(s, strings), right.strings));
        delete s[];
        return result;
    }
Kerry_Jr
Модератор
Эксперт PHP
2165 / 1961 / 685
Регистрация: 14.05.2014
Сообщений: 5,737
Записей в блоге: 1
Завершенные тесты: 5
11.10.2015, 19:29     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #3
Цитата Сообщение от nmcf Посмотреть сообщение
25 заменить на:
а ее-то за что? Она вроде все правильно делает
nmcf
5120 / 4440 / 1480
Регистрация: 14.04.2014
Сообщений: 17,614
11.10.2015, 19:30     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #4
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Она вроде все правильно делает
Да, перепутал. Её не надо.
Виталя97
2 / 2 / 2
Регистрация: 04.05.2015
Сообщений: 93
12.10.2015, 18:00  [ТС]     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #5
Kerry_Jr, nmcf, не неработает.
Выдает ошибку.
Миниатюры
Разработать класс String, который в дальнейшем будет использоваться для работы со строками  
nmcf
5120 / 4440 / 1480
Регистрация: 14.04.2014
Сообщений: 17,614
12.10.2015, 18:01     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #6
Актуальный вариант покажи.
Виталя97
2 / 2 / 2
Регистрация: 04.05.2015
Сообщений: 93
12.10.2015, 18:08  [ТС]     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #7
nmcf,
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
#include <iostream>
#include <string>
using namespace std;
 
class string_
{
private:
    char *strings;
    int len;
public:
    string_()
    {
        len = 81;
        strings = new char[len];
        *strings = '\0';
    }
    string_(int len)
    {
        strings = new char[len + 1];
        strcpy(strings, strings);
    }
    string_(const char* string)
    {
        strings = new char[strlen(strings) + 1];
        strcpy(strings, string);
    }
    string_(const string_ &news)
    {
        strings = new char[strlen(strings) + 1];
        strcpy(strings, news.strings);
    }
    ~string_()
    {
        delete[] strings;
    }
 
    string_ operator + (const string_& right)
    {
        char *s = new char[len + right.len + 1];
        string_ result(strcat(strcpy(s, strings), right.strings));
        delete[] s;
        return result;
    }   
 
    friend istream& operator >> (istream& stream, string_& orig);
    friend ostream& operator << (ostream& stream, const string_& orig);
};
 
istream& operator >> (istream& stream, string_& orig)
{
    stream >> orig.strings;
    return stream;
}
 
ostream& operator << (ostream& stream, const string_& orig)
{
    stream << orig.strings;
    return stream;
}
 
int main()
{
    string_ string1, string2(80);
 
    cout << "Enter string 1: ";
    cin >> string1;
 
    cout << "Enter string 2: ";
    cin >> string2;
 
    cout << string1 << " + " << string2;
    string1 + string2;
    cout << " = " << string1 << endl;
 
    return 0;
}
nmcf
5120 / 4440 / 1480
Регистрация: 14.04.2014
Сообщений: 17,614
12.10.2015, 18:18     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Оператор + требует оператор присваивания. Почему не добавил? И конструкторы у тебя кривоваты.
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
86
87
88
#include <iostream>
#include <string>
using namespace std;
 
class string_
{
private:
    char *strings;
    int len;
public:
    string_()
    {
        len = 80;
        strings = new char[len + 1];
        *strings = '\0';
    }
    string_(int l)
    {
        len = l;
        strings = new char[len + 1];
        *strings = '\0';
    }
    string_(const char* s)
    {
        len = strlen(s);
        strings = new char[len + 1];
        strcpy(strings, s);
    }
    string_(const string_ &news)
    {
        len = news.len;
        strings = new char[len + 1];
        strcpy(strings, news.strings);
    }
    ~string_()
    {
        delete[] strings;
    }
 
    string_ operator + (const string_& right)
    {
        char *s = new char[len + right.len + 1];
        string_ result(strcat(strcpy(s, strings), right.strings));
        delete[] s;
        return result;
    }   
 
    string_& operator = (const string_& right)
    {
        len = right.len;
        delete[] strings;
        strings = new char[len + 1];
        strcpy(strings, right.strings);
        return *this;
    }   
 
    friend istream& operator >> (istream& stream, string_& orig);
    friend ostream& operator << (ostream& stream, const string_& orig);
};
 
istream& operator >> (istream& stream, string_& orig)
{
    stream >> orig.strings;
    return stream;
}
 
ostream& operator << (ostream& stream, const string_& orig)
{
    stream << orig.strings;
    return stream;
}
 
int main()
{
    string_ string1, string2(80), string3;
 
    cout << "Enter string 1: ";
    cin >> string1;
 
    cout << "Enter string 2: ";
    cin >> string2;
 
    cout << string1 << " + " << string2;
    string3 = string1 + string2;
    cout << " = " << string3 << endl;
 
    return 0;
}
Виталя97
2 / 2 / 2
Регистрация: 04.05.2015
Сообщений: 93
12.10.2015, 19:18  [ТС]     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #9
nmcf, а перегрузка оператора += аналогично ж перегрузке оператора +?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 19:28     Разработать класс String, который в дальнейшем будет использоваться для работы со строками
Еще ссылки по теме:
C++ Класс для работы со строками CString
C++ Написать класс для эффективной работы со строками
Создайте класс для работы со строками CString C++
Разработать класс String определив для него методы C++
Разработать класс String определив для него методы C++

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

Или воспользуйтесь поиском по форуму:
nmcf
5120 / 4440 / 1480
Регистрация: 14.04.2014
Сообщений: 17,614
12.10.2015, 19:28     Разработать класс String, который в дальнейшем будет использоваться для работы со строками #10
Ну сходство есть.
C++
1
2
3
4
5
6
7
8
9
    string_& operator += (const string_& right)
    {
        len += right.len;
        char *s = new char[len + 1];
        strcat(strcpy(s, strings), right.strings);
        delete[] strings;
        strings = s;
        return *this;
    }
Yandex
Объявления
12.10.2015, 19:28     Разработать класс String, который в дальнейшем будет использоваться для работы со строками
Ответ Создать тему
Опции темы

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