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

C++

Войти
Регистрация
Восстановить пароль
 
Akord
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 24
#1

Методы строкового класса - C++

07.12.2009, 17:39. Просмотров 923. Ответов 6
Метки нет (Все метки)

Нужно разработать реализацию класса string, позволяющего оперировать с
текстовыми строками, как с базовыми типами данных. Класс должен обеспечивать выполнение следующих операции:

- конкатенация строк (оператор +)
- поиск и замена текста (метод replace)
- (еще куча всего, что я уже написал)

Вот каким образом все выглядит(убраны другие методы, чтобы не загромождать):
Код:
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
  class string { 
      struct rep 
 { 
          char* s;           // указатель на данные 
          int   n;           // счетчик ссылок 
  }; 
      rep *p; 
 
  public: 
      string(char *);      
      string();              
      string(string &);      
      ~string(); 
  }; 
 
  string::string() 
  { 
      p = new rep; 
      p->s = 0; 
      p->n = 1; 
  } 
 
  string::string(char* s) 
  { 
      p = new rep; 
      p->s = new char[ strlen(s)+1 ]; 
      strcpy(p->s, s); 
      p->n = 1; 
  } 
 
  string::string(string& x) 
  { 
      p = new rep; 
      p->s = new char[strlen(x.p->s) + 1]; 
      strcpy(p->s, x.p->s); 
      p->n = x.p->n; 
      p->n++; 
  } 
 
  string::~string() 
  { 
      if (--p->n == 0) { 
          delete p->s; 
          delete p; 
      } 
  }
Помогите пожалуйста с конкатенацией и методом replace!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2009, 17:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Методы строкового класса (C++):

Стоит ли прятать интерфейсные методы внутри класса? - C++
1) Стоит ли прятать интерфейсные методы внутри класса, чтобы обеспечить доступ к интерфейсу интерфейса только с помощью явного приведения...

Указатель на метод класса в качестве аргумента метода класса - C++
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот потребовалось создать ХХХ в дополнительном классе. Вопрос: как...

Указатели на методы класса - C++ Builder
Как вот это откомпилить в C++ Builder WindowClass.lpfnWndProc = &CMainWindow::OnEvent; при попытке компиляции имеем ошибку: ...

Создание массива указателей на методы класса TForm2 - C++ Builder
Здравствуйте! Разрабатываю приложение, состоящие из трех форм. Первая форма представляет собой меню из которого вызывается вторая или...

Перенос значения элемента строкового массива - C++ Builder
Нужно заполнить двумерный массив символами. Мой код выглядит так: k=n=0; for(i=int('а'); i<int('я'); i++) {k=n++; ...

Преобразование строкового типа в переменную типа float - C++ Builder
Как в программе С++ Builder6 преобразовать строковый тип числа взятого из компонента StringGrid1->Cells в переменную типа float, чтобы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
07.12.2009, 17:43 #2
Цитата Сообщение от Akord Посмотреть сообщение
Помогите пожалуйста с конкатенацией
А если схитрить и вызвать стандартную функцию strcat() ?
Akord
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 24
07.12.2009, 19:06  [ТС] #3
я думаю, что как-то так:
C++
1
2
3
4
5
6
7
8
9
  string& string::operator+(char* s)
  {
    string temp;
    temp.length = strlen(p->s) + strlen(s); // метод length есть в этом классе, вычисляет длину строки
     temp = new char[temp.length + 1];
    strcpy(temp, p->s);       
    strcat(temp, s);       
    return temp; 
}
но здесь ошибки есть(
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
07.12.2009, 20:13 #4
Цитата Сообщение от Akord Посмотреть сообщение
temp = new char[temp.length + 1];
Нужно выделять память под массив char. В твоем случае temp.p->s = new char[temp.length() + 1];
И потом, раз length - метод, то нужно писать его как метод, а не переменную. (скобочки)
Akord
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 24
08.12.2009, 09:57  [ТС] #5
вот так?
C++
1
2
3
4
5
6
7
8
9
  string& string::operator+(char* s)
  {
    string temp;
    temp.length() = strlen(p->s) + strlen(s); 
    temp.p->s = new char[temp.length() + 1];
    strcpy(temp.p->s, p->s);       
    strcat(temp.p->s, s);       
    return temp; 
}
а как сделать
C++
1
string& string::operator+(const string& x)
?
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
08.12.2009, 10:45 #6
Код
string[COLOR="Red"]/*&*/[/COLOR] string::operator+(char* s)
Без &
Akord
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 24
09.12.2009, 11:03  [ТС] #7
C++
1
string& string::operator+(const string& x)
а это как написать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2009, 11:03
Привет! Вот еще темы с ответами:

Можно ли объявлять в описании одного класса объекты другого класса - C++ Builder
Здравствуйте! Помогите, пожалуйста, разобраться: я описал класс SignalZakon, а теперь хочу создать объекты этого класса (k, T1 и Т2) в...

Использовать private члены класса внутри static ф-ий этого же класса. - C++ Builder
Все привет! Такая вот проблема. Есть класс (естественно тестовый, для пример): class SCRIPT{ private: SCRIPT(); ...

Как правильно создать массив объектов текущего класса в методе данного класса? - C++ Builder
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать этот метод внутри класса, экземпляром...

Обращение к элементам класса (поставив точку, показать свойства и методы класса) - C#
Есть класс Audio, у него есть две основных задачи воспроизводить и записывать звук (Recorder/Player). Хотелось бы, что бы все методы и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.12.2009, 11:03
Ответ Создать тему
Опции темы

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