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

C++

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

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

07.12.2009, 17:39. Просмотров 922. Ответов 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++
Форумчане, помогите пожалуйста с задачей. Никак не пойму как перегрузить часть операторов. Вот условие задачи : Создать динамический...

методы класса - C++ Linux
Доброго времени суток! Прошу дать совет по классам, а точнее по методам класса. Правильно ли я понимаю, что метод класса это функция,...

Методы класса - C++
Я щас организую разреженную матрицу через двусвязный упорядоченый циклический список... ну да не суть. У меня такой вопрос - я сейчас...

методы класса - C++
Доброго времени суток! Заранее извиняюсь за тупку. Чем отличаются вызовы c.printMe(); c.printMe; Первый понятно,...

протестировать методы класса - C++
У меня есть класс "вектор". В нём добавила метод, который вычисляет длину вектора и перегрузила функции +,-,=. Нужно протестировать все...

Методы и конструкторы класса - C++
Добрый день) Предположим, имеется некоторый класс "Tfunction" представляющий математическую функцию. Интерфейс этого класса хотелось...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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)
Без &
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2009, 11:03     Методы строкового класса
Еще ссылки по теме:

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

Inline методы класса - C++
struct A { inline void func(){ do_anything(); }; } a; inline void func(){ do_anything(); }; int main() { ...

Указатель на методы класса - C++
Имеется код: #include <iostream> using namespace std; class s { private: int a; public: void getData() { cout << a;...

Виртуальные методы класса - C++
Скажите, зачем нужны виртуальные методы? Почему нельзя использовать стандартные? Спасибо.

Dll методы класса - Visual C++
здравствуйте, у меня такой вопрос есть дллка в которой экспортированные методы класса к примеру //хедер: class somecls ...


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

Или воспользуйтесь поиском по форуму:
Akord
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 24
09.12.2009, 11:03  [ТС]     Методы строкового класса #7
C++
1
string& string::operator+(const string& x)
а это как написать?
Yandex
Объявления
09.12.2009, 11:03     Методы строкового класса
Ответ Создать тему
Опции темы

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