Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Реализация строки С++

26K
15 мая 2008 года
АлексейМ
18 / / 06.12.2007
Я реализовал класс со строками так, все вроде ничего, только я хочу чтобы если ещё раз вызвав конкатенацию, добавлять новое введенное мной слово в уже новое слово, а не в изначальное ( до первой попытки конкатенации) ??
Код:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"
#include "iostream.h"

class string
{
  public:
  string (char what) ;
  string strcat(char * source);
  string str(char what);
  void print_at(unsigned x,unsigned y);
  private:
 char * buf;
 unsigned len;
};

string::string(char what)
{ buf=new char[2];
  len=1;
  buf[0]=what;
  buf[1]=0;
}

void string::print_at(unsigned x,unsigned y)
{ gotoxy(x,y);
  cout <<buf;
}


string string::strcat (char * source)
{ len+=strlen(source);
  ::strcat(buf, source);
  return *this;
}

string string::str(char what)
{
 char *temp=buf;
 len=1;
 buf=new char[len+1];
 strcpy(buf,temp);
 ::strcat(buf,temp);
// delete [] temp;
 return *this;
 }

void main()
{ int ans,x1,y1;
  char what;
  clrscr();
  cout << "input word:";
  while (ans!=3)
  { cout<<" 1 - Insert word" <<'\n';
    cout<<" 2 - Concat word" <<'\n';
    cout<<" 3 - Write word" <<'\n';
    cin >> ans;
    switch(ans)
  {
   case 1:

      { clrscr();
    cout <<"Vvedite bukvy:"<<'\n';
    cin >> what;
    cout <<"Vvedite koord:"<<'\n';
    cout <<"Vvedite x:"<<'\n';
    cin >> x1;
    cout <<"Vvedite y:"<<'\n';
    cin >> y1;
      string str(what);
      str.str(what);
      str.print_at(10,11);

      break;
   }
    case 2:

   { clrscr();
    char* test = "t";
    string str('r');
    cout <<"Vvedite slovo:"<<'\n';
    cin >> test;
    cout <<"Vvedite koord:"<<'\n';
    cout <<"Vvedite x:"<<'\n';
    cin >> x1;
    cout <<"Vvedite y:"<<'\n';
    cin >> y1;
    str.strcat(test);
    str.print_at(x1,y1);
    str.strcat(test);
    str.print_at(x1,y1+2);
   break; }
   case 3:
   {
    break;
   }
   }
   } ;


 getchar();
}
353
15 мая 2008 года
Nixus
840 / / 04.01.2007
Рализация метода strcat не верна. Да и в добавок куча утечек памяти.
535
16 мая 2008 года
Нездешний
537 / / 17.01.2008
Не понял: что значит
Цитата:
если ещё раз вызвав конкатенацию

???

По классу:
1. Определите деструктор
2. Определите конструктор копирования
3. Перегрузите функцию strcat для использования объектом вашего класса -- strcat(string& object)
4. Определите операции доступа к отдельным символам

По strcat -- например, так:

Код:
string string::strcat(char *source)
{
      int iLength = lstrlen(buf) + lstrlen(source);
      char *szBuf = new char [iLength + 1];

      lstrcpy(szBuf, buf);
      lstrcat(szBuf, source);
     
      string sResult(szBuf);
      delete[] szBuf;

      return sResult;
}
26K
16 мая 2008 года
АлексейМ
18 / / 06.12.2007
Цитата: Нездешний
Не понял: что значит ???

По классу:
1. Определите деструктор
2. Определите конструктор копирования
3. Перегрузите функцию strcat для использования объектом вашего класса -- strcat(string& object)
4. Определите операции доступа к отдельным символам

По strcat -- например, так:
Код:
string string::strcat(char *source)
{
      int iLength = lstrlen(buf) + lstrlen(source);
      char *szBuf = new char [iLength + 1];

      lstrcpy(szBuf, buf);
      lstrcat(szBuf, source);
     
      string sResult(szBuf);
      delete[] szBuf;

      return sResult;
}



Я понимаю, но у меня программа такая не запускается со всеми процедурами вместе..

12K
17 мая 2008 года
St0p
59 / / 15.04.2007
Цитата: Nixus
Да и в добавок куча утечек памяти.



Вопрос не по теме: Есть ли какой-ть софт именно для поиска утечек? Если есть то какой. Заранее спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог