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

Создать класс для работы сo строками - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
26.11.2013, 14:40     Создать класс для работы сo строками #1
Создать класс для работы сo строками. Разработать элементы класса:
a. Поля:
* указатель на char - хранит адрес динамически выделенной памяти;
int n.
b. Конструктор, позволяющий создать строку из n символов.
c. Методы, позволяющие:
подсчитать количество знаков препинания в строке;
заменить в строке все строчные символы на прописные;
прочитать символ из заданной позиции.
d. Свойства:
возвращающее общее количество элементов в строке (доступное только для чтения);
позволяющее установить значение поля, в соответствии с введенным значением строки с клавиатуры, а также получить значение данного поля (доступно для чтения и записи).
Получилась такая ерунда

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
#include <cstdlib>
#include <iostream>
 
 
using namespace std;
class String
{
private:
    char * string;
public:
String()
    {
        int size = 80;
        string = new char[size];
        
    }
    String(char * string)
    {
        string = new char[];
    }
void Initialization()
    {
        cout<<"Введите строку: ";
        gets(string);
        system("cls");
        ChoiseShowString();
        }
int main()//подсчитать количество знаков препинания в строке;
{
 setlocale(0, "");
    
    char *str = "Как,,Я люблю,,программирование,,!";
    int len = strlen(str);
    int punctCount = 0;
    for(int i = 0; i < len; i++)
    {
        if(ispunct((unsigned char)str[i])) punctCount++;
    }
    cout << str << endl;
    cout << "Punct count = " << punctCount << endl;
         //прочитать  символ из заданной позиции.
 
         
 
 
 
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
26.11.2013, 14:45     Создать класс для работы сo строками #2
Мария1501, в следующий раз оформите код в тэги, так удобнее читать. А в чем проблема в коде? Какие то ошибки выдает?
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
26.11.2013, 15:04  [ТС]     Создать класс для работы сo строками #3
Да тут дело не в том ошибки или нет, я не могу составить правильно задачу, это я привела то, что нарыла в интернете
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.11.2013, 15:10     Создать класс для работы сo строками #4
Ух тут много чего наворочено не так, да и половины не сделано как вижу.

Цитата Сообщение от Мария1501 Посмотреть сообщение
String()
{
int size = 80;
string = new char[size];
}
String(char * string)
{
string = new char[];
}
Странные конструкторы. По умолчанию строка только 80 символов а не n как требовалось в условии. А второй конструктор вообще жесть

Добавлено через 44 секунды
в чем собственно проблема то?
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
26.11.2013, 22:15  [ТС]     Создать класс для работы сo строками #5
Проблема собственно во всем, с самого начала

Добавлено через 4 часа 10 минут
Вы можете помочь ее решить?

Добавлено через 2 часа 41 минуту
ПОМОГИИИИТЕЕЕЕЕ,ПОЖААААЛУЙСТААААААА
cpp_job
 Аватар для cpp_job
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
26.11.2013, 22:21     Создать класс для работы сo строками #6
Пример из книги Г.Шилдта Полный справочник по С++ четвертое издание: Глава 39 Интеграция новых классов: пользовательский класс для работы со строками.

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
#include <iostream>
#include <new>
#include <cstring>
#include <cstdlib>
using namespace std;
 
class StrType {
  char *p;
  int size;
public:
  StrType();
  StrType(char *str);
  StrType(const StrType &o); // copy constructor
 
  ~StrType() { delete [] p; }
 
  friend ostream &operator<<(ostream &stream, StrType &o);
  friend istream &operator>>(istream &stream, StrType &o);
 
  StrType operator=(StrType &o); // assign a StrType object
  StrType operator=(char *s); // assign a quoted string
 
  StrType operator+(StrType &o); // concatenate a StrType object
  StrType operator+(char *s); // concatenate a quoted string
  friend StrType operator+(char *s, StrType &o); /*  concatenate
                 a quoted string with a StrType object */
 
  StrType operator-(StrType &o); // subtract a substring
  StrType operator-(char *s); // subtract a quoted substring
 
  // relational operations between StrType objects
  int operator==(StrType &o) { return !strcmp(p, o.p); }
  int operator!=(StrType &o) { return strcmp(p, o.p); }
  int operator<(StrType &o) { return strcmp(p, o.p) < 0; }
  int operator>(StrType &o) { return strcmp(p, o.p) > 0; }
  int operator<=(StrType &o) { return strcmp(p, o.p) <= 0; }
  int operator>=(StrType &o) { return strcmp(p, o.p) >= 0; }
 
  // operations between StrType objects and quoted strings
  int operator==(char *s) { return !strcmp(p, s); }
  int operator!=(char *s) { return strcmp(p, s); }
  int operator<(char *s) { return strcmp(p, s) < 0; }
  int operator>(char *s) { return strcmp(p, s) > 0; }
  int operator<=(char *s) { return strcmp(p, s) <= 0; }
  int operator>=(char *s) { return strcmp(p, s) >= 0; }
 
  int strsize() { return strlen(p); } // return size of string
  void makestr(char *s) { strcpy(s, p); } // null-terminated string
  operator char *() { return p; } // conversion to char *
};
 
// No explicit initialization.
StrType::StrType() {
  size = 1; // make room for null terminator
  try {
    p = new char[size];
  } catch (bad_alloc xa) {
    cout << "Allocation error\n";
    exit(1);
  }
  strcpy(p, "");
}
 
// Initialize using a quoted string.
StrType::StrType(char *str) {
  size = strlen(str) + 1; // make room for null terminator
  try {
    p = new char[size];
  } catch (bad_alloc xa) {
    cout << "Allocation error\n";
    exit(1);
  }
  strcpy(p, str);
}
 
// Initialize using a StrType object.
StrType::StrType(const StrType &o) {
  size = o.size;
  try {
    p = new char[size];
  } catch (bad_alloc xa) {
    cout << "Allocation error\n";
    exit(1);
  }
  strcpy(p, o.p);
}
 
// Output a string.
ostream &operator<<(ostream &stream, StrType &o)
{
  stream << o.p;
  return stream;
}
 
// Input a string.
istream &operator>>(istream &stream, StrType &o)
{
  char t[255]; // arbitrary size - change if necessary
  int len;
 
  stream.getline(t, 255);
  len = strlen(t) + 1;
 
  if(len > o.size) {
    delete [] o.p;
    try {
      o.p = new char[len];
    } catch (bad_alloc xa) {
      cout << "Allocation error\n";
      exit(1);
    }
    o.size = len;
  }
  strcpy(o.p, t);
  return stream;
}
 
// Assign a StrType object to a StrType object.
StrType StrType::operator=(StrType &o)
{
  StrType temp(o.p);
 
  if(o.size > size) {
    delete [] p; // free old memory
    try {
      p = new char[o.size];
    } catch (bad_alloc xa) {
      cout << "Allocation error\n";
      exit(1);
    }
    size = o.size;
  }
 
  strcpy(p, o.p);
  strcpy(temp.p, o.p);
 
  return temp;
}
 
// Assign a quoted string to a StrType object.
StrType StrType::operator=(char *s)
{
  int len = strlen(s) + 1;
  if(size < len) {
    delete [] p;
    try {
      p = new char[len];
    } catch (bad_alloc xa) {
      cout << "Allocation error\n";
      exit(1);
    }
    size = len;
  }
  strcpy(p, s);
  return *this;
}
 
// Concatenate two StrType objects.
StrType StrType::operator+(StrType &o)
{
  int len;
  StrType temp;
 
  delete [] temp.p;
  len = strlen(o.p) + strlen(p) + 1;
  temp.size = len;
  try {
    temp.p = new char[len];
  } catch (bad_alloc xa) {
    cout << "Allocation error\n";
    exit(1);
  }
  strcpy(temp.p, p);
 
  strcat(temp.p, o.p);
 
  return temp;
}
 
// Concatenate a StrType object and a quoted string.
StrType StrType::operator+(char *s)
{
  int len;
  StrType temp;
 
  delete [] temp.p;
 
  len = strlen(s) + strlen(p) + 1;
  temp.size = len;
  try {
    temp.p = new char[len];
  } catch (bad_alloc xa) {
    cout << "Allocation error\n";
    exit(1);
  }
  strcpy(temp.p, p);
 
  strcat(temp.p, s);
 
  return temp;
}
 
// Concatenate a quoted string and a StrType object.
StrType operator+(char *s, StrType &o)
{
  int len;
  StrType temp;
 
  delete [] temp.p;
 
  len = strlen(s) + strlen(o.p) + 1;
  temp.size = len;
  try {
    temp.p = new char[len];
  } catch (bad_alloc xa) {
    cout << "Allocation error\n";
    exit(1);
  }
  strcpy(temp.p, s);
 
  strcat(temp.p, o.p);
 
  return temp;
}
 
// Subtract a substring from a string using StrType objects.
StrType StrType::operator-(StrType &substr)
{
  StrType temp(p);
  char *s1;
  int i, j;
 
  s1 = p;
  for(i=0; *s1; i++) {
    if(*s1!=*substr.p) { // if not first letter of substring
      temp.p[i] = *s1;  // then copy into temp
      s1++;
    }
    else {
      for(j=0; substr.p[j]==s1[j] && substr.p[j]; j++) ;
      if(!substr.p[j]) { // is substring, so remove it
        s1 += j;
        i--;
      }
      else { // is not substring, continue copying
        temp.p[i] = *s1;
        s1++;
      }
    }
  }
  temp.p[i] = '\0';
  return temp;
}
 
// Subtract quoted string from a StrType object.
StrType StrType::operator-(char *substr)
{
  StrType temp(p);
  char *s1;
  int i, j;
 
  s1 = p;
  for(i=0; *s1; i++) {
    if(*s1!=*substr) { // if not first letter of substring
      temp.p[i] = *s1; // then copy into temp
      s1++;
    }
    else {
      for(j=0; substr[j]==s1[j] && substr[j]; j++) ;
      if(!substr[j]) { // is substring, so remove it
        s1 += j;
        i--;
      }
      else { // is not substring, continue copying
        temp.p[i] = *s1;
        s1++;
      }
    }
  }
  temp.p[i] = '\0';
  return temp;
}
 
int main()
{
  StrType s1("A sample session using string objects.\n");
  StrType s2(s1);
  StrType s3;
  char s[80];
 
  cout << s1 << s2;
 
  s3 = s1;
  cout << s1;
 
  s3.makestr(s);
  cout << "Convert to a string: " << s;
 
  s2 = "This is a new string.";
  cout << s2 << endl;
 
  StrType s4(" So is this.");
  s1 = s2+s4;
  cout << s1 << endl;
 
  if(s2==s3) cout << "Strings are equal.\n";
  if(s2!=s3) cout << "Strings are not equal.\n";
  if(s1<s4) cout << "s1 less than s4\n";
  if(s1>s4) cout << "s1 greater than s4\n";
  if(s1<=s4) cout << "s1 less than or equals s4\n";
  if(s1>=s4) cout << "s1 greater than or equals s4\n";
 
  if(s2 > "ABC") cout << "s2 greater than ABC\n\n";
 
  s1 = "one two three one two three\n";
  s2 = "two";
  cout << "Initial string: " << s1;
  cout << "String after subtracting two: ";
  s3 = s1 - s2;
  cout << s3;
 
  cout << endl;
  s4 = "Hi there!";
  s3 = s4 + " C++ strings are fun\n";
  cout << s3;
  s3 = s3 - "Hi there!";
  s3 = "Aren't" + s3;
  cout << s3;
 
  s1 = s3 - "are ";
  cout << s1;
  s3 = s1;
 
  cout << "Enter a string: ";
  cin >> s1;
  cout << s1 << endl;
  cout << "s1 is " << s1.strsize() << " characters long.\n";
 
  puts(s1); // convert to char *
 
  s1 = s2 = s3;
  cout << s1 << s2 << s3;
 
  s1 = s2 = s3 = "Bye ";
  cout << s1 << s2 << s3;
 
  return 0;
}
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
26.11.2013, 22:56  [ТС]     Создать класс для работы сo строками #7
А можете кинуть эту книжку, просто для меня, человека полный нолб в программирование тут ничего не понятно
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
26.11.2013, 22:59     Создать класс для работы сo строками #8
Цитата Сообщение от Мария1501 Посмотреть сообщение
А можете кинуть эту книжку, просто для меня, человека полный нолб в программирование тут ничего не понятно
Я ее как раз сейчас себе на сервер заливаю. Будет доступна через 10 минут по адресу:
http://antonkretov.ru/creference.pdf
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 11:49     Создать класс для работы сo строками
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Мария1501
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 29
27.11.2013, 11:49  [ТС]     Создать класс для работы сo строками #9
Не вижу где скачать на Вашем сайте
Yandex
Объявления
27.11.2013, 11:49     Создать класс для работы сo строками
Ответ Создать тему
Опции темы

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