Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вопрос про класс строки


Автор: clarkkent 11.5.2008, 14:50
Добрый день уважаемым программистам. Очень надеюсь на вашу помощь. Помогите реализовать класс строки с несколькими видами функций. Пример описания класса таков:
Код

Class  string {
  public:
  string (char what) ;                                   // Инициализация литерой
  string strcat(char * scource)                  // конкатенация области памяти до первого
  string strcat(char what)                            // Добавление символа
  void print_at (unsigned x,unsigned y)    // вывод строки на экран в позиции с координатами x, y
  private:
 char * buf;
 unsigned len;
  };

Автор: baldina 11.5.2008, 15:49
Код

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

string string::strcat (char * str)
{
   size_t str_len = strlen (str);
   char *temp = new char[len+str_len+1];
   if (buf)
   {
     strcpy (temp, buf);
     temp += len;
   }
   strcpy (temp, str);
   len += str_len;
   delete buf;
   buf = temp;

  return *this;
}


а вообще интерфейс класса немного странный по составу, и кроме того не хватает деструктора
Код

string::~string ()
{
   delete [] buf;
}

Автор: clarkkent 11.5.2008, 17:41
Цитата(baldina @ 11.5.2008,  15:49)
Код

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

string string::strcat (char * str)
{
   size_t str_len = strlen (str);
   char *temp = new char[len+str_len+1];
   if (buf)
   {
     strcpy (temp, buf);
     temp += len;
   }
   strcpy (temp, str);
   len += str_len;
   delete buf;
   buf = temp;

  return *this;
}


а вообще интерфейс класса немного странный по составу, и кроме того не хватает деструктора
Код

string::~string ()
{
   delete [] buf;
}

Спасибо, в очень помогли, функция strcat (char * str) то есть конкатенация области памяти до первого хотя бы в двух словах как это можно объяснить, просто не очень представляю. А операцию добавления символа в строку как strcat (char what) как лучше сделать?

Добавлено через 11 минут и 9 секунд
baldina, Спасибо за информацию. Функция strcat (char * str) то есть конкатенация области памяти до первого хотя бы в двух словах как это можно объяснить, просто не очень представляю. А операцию добавления символа в строку как strcat (char what) как лучше сделать? 

Автор: bsa 11.5.2008, 20:25
clarkkent, хотел бы для начала отметить некоторую неудобность класса, имеющего такой интерфейс. Рекомендую взглянуть на интерфейс стандартного класса (там, конечно, много лишнего, но суть увидеть просто): http://www.sgi.com/tech/stl/basic_string.html

Реализовать strcat очень просто:
1. твой класс должен хранить в приватной зоне указатель на начало буфера данных, размер строки в этом буфере и размер самого буфера (последние два могут совпадать, но это неоптимально, но для домашней работы сойдет).
2. метод strcat должен измерить размер добавляемой строки, если он не больше, чем свободное место в буфере, то переходим на п. 4
3. выделяем место под буфер так, чтобы туда влезла и предыдущее значение и добавляемая строка (а еще лучше в два раза больше - на будущее), копируем в него содержимое предыдущего буфера (думаю, смысла копировать больше, чем занимает строка, нет), освобождаем память предыдущего буфера, обновляем переменные класса (указатель и размеры).
4. копируем в конец строки в буфере (указатель + длина строки) добавляемую строку, обновляем переменную класса "размер строки"

Автор: clarkkent 11.5.2008, 21:07
bsa, спасибо, просто мне надо именно так реализовать по заданию любым несложным способом, но так..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)