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

Изменить программу - C++

Восстановить пароль Регистрация
 
Orion6767
2 / 2 / 0
Регистрация: 26.10.2010
Сообщений: 67
14.02.2012, 11:46     Изменить программу #1
Спасайте - завтра нужно сдать все отчёты. Осталась одна программа:

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

Задание: Если длина L (строки) кратна 5-и, то подсчитывается количество скобок всех видов.

На этом форуме я нашёл подобную задачу, только там другое условие, я немного изменил его и вот что решает следующая задача:

Если длина L (строки) кратна 5-и, то удаляются 2 первых и 2 последних символа.


Можете подправить код, чтобы программа решала моё условие . Править код (если не ошибаюсь) нужно с 76 строки .

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
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <cstring>
#include <fstream>
 
using namespace std;
 
class String
{
private:
char *m_Str; 
int L; 
void New (const char *str); 
void Del (); 
public:
String (); 
explicit String (const String &str); 
String (const char * str); 
 
~String (); 
void Set ();
void Print ();
void ofile ();
String & operator = (const String & str)
;};
 
void String :: New (const char *str)
{
int size = strlen(str);
m_Str = new char[size+1]; 
L=size; 
strcpy (m_Str, str); 
}
 
void String :: Del()
{
delete [] m_Str;
;}
String::String()
{New("\0");}
String::String (const char *str)
{New(str);}
String::String (const String &str)
{New(str.m_Str);}
String::~String()
{Del();}
 
void String::Print()
{
cout << m_Str << '\n';
}
 
void String::Set()
{
Del();
char tmp[1000];
cin.getline( tmp, 1000 );
cin.sync();
New(tmp); 
}
 
void String::ofile()
{
ofstream file;
file.open ("text.txt", ios::app);
file << m_Str << endl;
file.close ();
}
 
String & String::operator = (const String &str)
{
int j=0;
Del();
char *tmp=new char[str.L];
if(str.L%5==0)
{  
for ( int i=2; i<str.L-2; i++ )
{
tmp[j]=str.m_Str[i];
j++;
}
tmp[j]='\0';
New(tmp);
}
else
New ("Stroka ne kratna 5");
delete [] tmp;
return *this;
}; 
 
int main ()
{
String s1, s2;
s1.Set();
s1.ofile();
s2 = s1;
s2.Print();
s2.ofile();
getchar();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2012, 11:46     Изменить программу
Посмотрите здесь:

C++ Необходимо изменить программу в C++
Изменить программу C++
C++ Изменить программу на языке С на С++
C++ Изменить программу
изменить программу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
14.02.2012, 13:10     Изменить программу #2
C++
1
2
3
4
5
6
7
8
9
10
String & String::operator = (const String &str)
{
     int j=0;
     Del();
     char *tmp=new char[str.L];
     for ( int i=0; i<str.L; i++ )
          tmp[i]=str.m_Str[i];      tmp[i]='\0';
     New(tmp);
     return *this;
}
 Комментарий модератора 
Используйте теги форматирования кода!
Orion6767
2 / 2 / 0
Регистрация: 26.10.2010
Сообщений: 67
14.02.2012, 16:12  [ТС]     Изменить программу #3
zss2, что-то не то. Условия со скобками не прописаны, программа толком нечего не делает.

Добавлено через 2 минуты
HELP!
-=ЮрА=-
Заблокирован
Автор FAQ
14.02.2012, 17:33     Изменить программу #4
Цитата Сообщение от Orion6767 Посмотреть сообщение
zss2, что-то не то. Условия со скобками не прописаны, программа толком нечего не делает.
Добавлено через 2 минуты
HELP!
- решил переделать под динамический realloc в плюсах - вышло как по мне неплохо
Листинг TString.h
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <string>
using namespace std;
 
class String
{
private:
    char * m_Str;
    long uLength;
    //ÄîìîðîùåГ*Г*ûé Г*Г*Г*ëîã ÑèøГ*îãî realloc
    //ÍåïëîõГ*Гї ГўГҐГ№ГЁГ·ГЄГ* âûøëГ*
    char * alloc(char * ptr, long size);
public:
    //Âñå 3 ГІГЁГЇГ* ГЄГ®Г*ñòðóêòîðîâ
    String()
    {
        m_Str = new char[1 + (uLength = 0)];
        if(!m_Str)
            cout<<"Allocation memory error\n";
    }
    String(const char * srs)
    {
        m_Str = new char[1 + (uLength = strlen(srs))];
        if(!m_Str)
            cout<<"Allocation memory error\n";
    }
    String(String & srs)
    {
        if((m_Str = alloc(m_Str, srs.uLength + 1)))
        if(!strncpy(m_Str,srs.m_Str,srs.uLength + 1))
            cout<<"Error moving memory\n";
        else
            uLength = srs.uLength;
    }
    //Äåñòðóêòîð
    ~String()
    {
        uLength = 0;
        if(m_Str)
            delete [] m_Str;
    }
    //Ìåòîäû
    String &Set();
    char *  Get();
    void  Print();
    //ÏåðåãðóæåГ*Г*ûå îïåðГ*òîðû
    String & operator=(String &srs);
};
 
char * String::alloc(char * ptr, long size)
{
    char * ret;
    if(0 < size)
    {
        ret = new char[size + 1];
        if(!strncpy(ret,ptr,size))
            cout<<"Error moving memory\n";
        else
            delete [] ptr;
    }
    else
        cout<<"Cant allocate memory of zero size\n";
    return (ptr = ret);
}
 
String&
String::Set()
{
    String str;
    cout<<"Enter string :\n";
    while((m_Str[uLength] = cin.get()) != '\n')
    {
        m_Str = alloc
                    (
                        m_Str, 
                        (1 + (uLength = uLength + 1))
                    );
    }
    m_Str[uLength] = '\0';
    return *this;
}
 
char *
String::Get()
{
    return (*this).m_Str;
}
 
void
String::Print()
{
    if(!m_Str)
        cout<<"Can't print not initialized string\n";
    else
        cout<<m_Str<<endl;
}
 
String&
String ::operator= (String &srs)
{
    if((m_Str = alloc(m_Str, srs.uLength + 1)))
    if(!strncpy(m_Str,srs.m_Str,srs.uLength + 1))
        cout<<"Error moving memory\n";
    else
        uLength = srs.uLength;
    return *this;
}
Листинг main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "TString.h"
#include <fstream>
 
int main ()
{
    String s1, s2;
    s1.Set();
    s2.Set();
    s1 = s2;
    cout<<"First string : ";
    s1.Print();
    ofstream ofs("out.txt");
    if(!ofs)
        cout<<"Error of creation out.txt\n";
    else
    {
        ofs<<"s1 = "<<s1.Get()<<endl
           <<"s2 = "<<s2.Get()<<endl;
        ofs.close();
    }
    system("pause");
    return 0;
}
out.txt
s1 = String No2
s2 = String No2
Миниатюры
Изменить программу  
-=ЮрА=-
Заблокирован
Автор FAQ
14.02.2012, 17:38     Изменить программу #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
String&
String::Set()
{
* * * * String str;
* * * * cout<<"Enter string :\n";
* * * * while((m_Str[uLength] = cin.get()) != '\n')
* * * * {
* * * * * * * * m_Str = alloc
* * * * * * * * * * * * * * * * * * * * (
* * * * * * * * * * * * * * * * * * * * * * * * m_Str,
* * * * * * * * * * * * * * * * * * * * * * * * (1 + (uLength = uLength + 1))
* * * * * * * * * * * * * * * * * * * * );
* * * * }
* * * * m_Str[uLength] = '\0';
* * * * return *this;
}
- т.е. мы делаем строку под длинну того что ввели, и не привязываемся к буфферу какого-то определённого размера(можем делать ввод абсолютно любой длинны в рамках безсбойной работы new [])
Orion6767
2 / 2 / 0
Регистрация: 26.10.2010
Сообщений: 67
14.02.2012, 18:07  [ТС]     Изменить программу #6
-=ЮрА=-, спасибо за проделанную работу, за отзывчивость. Только что-то... подсчёта скобок так и нету. Это, если я правильно понимаю, "Общая постановка", без конкретной задачи.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.02.2012, 18:11     Изменить программу #7
-=ЮрА=-, А как ты думаешь как он обычно реализуется в библиотеках etc? (=
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 18:11     Изменить программу
Еще ссылки по теме:

Изменить программу C++
необходимо изменить программу C++
Изменить программу C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
14.02.2012, 18:11     Изменить программу #8
Цитата Сообщение от Orion6767 Посмотреть сообщение
Это, если я правильно понимаю, "Общая постановка", без конкретной задачи.
- я нарисал лишь класс, как строить работу с ним это уже ваша реализация, ИМХО подсчёт скобок не такая уж архисложная задача выглядеть будет всё приблизительно так
C++
1
2
3
4
5
6
7
8
9
10
long nokr  = 0;
long nzak  = 0;
char * str = s1.Get();
for(long i = 0; str[i] != '\0'; i++)
{
if(str[i] == ')')
    nzak++;
if(str[i] == '(')
   notkr++;
}
Yandex
Объявления
14.02.2012, 18:11     Изменить программу
Ответ Создать тему
Опции темы

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