Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Sterv9Itnik
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 7
#1

"динамическая строка" и перегрузка операций (класс)

18.04.2016, 16:15. Просмотров 335. Ответов 8

Добрый день!
Прошу помочь написать,подсказать,что исправить в программе по заданию:
Пользовательский класс String должен содержать необходимые элементы-данные, которые создаются в динамической области памяти.
• Конструктор для создания строк: String (…);
• Деструктор: ~String();
• Метод ввода исходной строки: Set();
• Метод печати: void print(…);
Код методов – вне пространства определения класса. Программа иллюстрирует прямой и косвенный способы обращения к методам.
Ввести с клавиатуры строку символов S1. Признак окончания ввода строки - нажатие клавиши "Ввод". Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .
Исходную и преобразованную строки вывести в файл.
Вариант:Длина L >5-и, то выделяется подстрока до первого пробела;

Вот собственно,что я попытался написать,но не очень-то получилось:С
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
#include "stdafx.h"
#include "iostream"
#include <string.h>
#define SIZE 255 
using namespace std;
 
class String{
char *s1,*s2;
public:
String();
String(char*);
void set(char*);
void print();
String& operator = (String&){
    int j=0;
    if (strlen(s1)>5){int cp=0;
    if (s1==" "){cp=strlen(s1);
        for (unsigned int i=0;i<cp;i++){
    s1[i]=s2[j];
    j++;
    }
s2[j]='\0';
    }
    }
    return s2;
}
~String();
};
String::String(){
s1=new char[SIZE]; 
s1[0]='\0';        
s2=new char[SIZE];
s2[0]='\0';
};
String::String(char *s){
s1=new char[SIZE]; 
strcpy(s1,s);        
s2=new char[SIZE];
s2[0]='\0';
};
void String::set(char *s){for (unsigned int i=0;i<strlen(s);i++){ 
    s1[i]=s[i];
    s1[i]='\0';}
}
void String::print(){cout<<s1<<endl<<s2;
}
 
String::~String(){delete[] s1;}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus");
char s[265];
cout<<"Напиши что угодно и нажми ентер"<<endl;
cin.getline(s,256);
 
String s1(s);
s1.print();
String *s2=new String();
s1 = *s2;
s2->print();
 
    return 0;
}
Буду очень благодарен вам за помощь с:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 16:15
Ответы с готовыми решениями:

Класс динамическая строка и перегрузка операций
Форумчане, привет :) Нужна помощь!:help: Не могу найти, точнее их...

Класс "Массив". Перегрузка стандартных операций
Дан класс (возможное имя класса Massiv), задающий массив целых чисел. Поля...

Класс "Дата", перегрузка операций
Добрый день, помоги создать перегрузку для класса В соответствии с вариантом...

Динамическая строка и перегрузка операций
Ввести с клавиатуры строку символов S1. Признак окончания ввода строки -...

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

8
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
18.04.2016, 16:24 #2
"Длина L >5-и, то выделяется подстрока до первого пробела" - это к присваиванию относится? Длина чего? Первой или второй строки?
0
Sterv9Itnik
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 7
18.04.2016, 16:34  [ТС] #3
Я так понял,что длина первой.Вот мы что-то написали,выводится все,что написали,а потом выводится то,что до первого пробела.
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
18.04.2016, 16:44 #4
Тогда что делать с присваиваемой строкой? Она вообще не нужна?
0
Sterv9Itnik
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 7
18.04.2016, 16:47  [ТС] #5
Это которая под номером 59?
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
18.04.2016, 16:49 #6
Да. Чётко объясни, что должно происходить. Мне эта часть задания не ясна. Может, из присваиваемой строки надо взять до пробела, если она длиннее пяти? И после присвоить.
0
Sterv9Itnik
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 7
18.04.2016, 17:00  [ТС] #7
Да,именно так и надо сделать.
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
18.04.2016, 17:41 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String& operator = (const String& s)
{
    if (strlen(s.s1) > 5)
    {
        char *p = strchr(s.s1, ' ');
        if (p != NULL)
        {
            strncpy(s1, s.s1, p - s.s1);
            s1[p - s.s1] = '\0';
            return *this;
        }
    }
 
    strcpy(s1, s.s1);
 
    return *this;
}
1
Sterv9Itnik
0 / 0 / 0
Регистрация: 18.04.2016
Сообщений: 7
18.04.2016, 18:30  [ТС] #9
Спасибо большое,надо теперь у себя попробовать
0
18.04.2016, 18:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 18:30

Динамическая строка и перегрузка операций
Всем доброго дня!!!Если есть минутка, помогите сделать эти задания!буду очень...

Перегрузка операций "-" и "*" для строк
Для строк символов перезагрузить операции: &quot;–&quot; – унарный минус...

Класс "Парабола", перегрузка операторов "||" и "/"
класс: парабола y=ax^2+bx+c; Члены класса: Коэффициенты a,b,c; Методы:...


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

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

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