Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление символа в строку, Операция со строкой 
:(
    Опции темы
clarkkent
Дата 12.5.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



Доброе утро! Реализовал класс строки на примере представленного ниже кода.  как сделать так чтобы пользователю можно было добавить по одному символу в строку? у меня это не получается здесь..

Код

#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[0]=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()
{ clrscr();
  char* test = "tester";
  string str('t');
  str.strcat(test);
  str.print_at(10,10);
// str.strcat('t');
//
 str.print_at(10,11);
 getchar();
}


PM MAIL   Вверх
Rififi
Дата 12.5.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



clarkkent, 
в конструкторе ты затираешь строку нуль-терминатором
buf[0]=0;

надо так:  buf[1]=0;

в функции str ты не учитываешь размер уже имеющейся строки, поэтому происходит выход за границы массива.

len = 1 + strlen(buf); // размер, достаточный для старой строки + 1 символ

лучше используй функции с ограничителем выходного буфера - strncpy, strncat etc - класс тогда всё равно будет работать неправильно, но по крайней мере не будет возникать Undefined Behavior.

PM MAIL   Вверх
bsa
Дата 12.5.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



clarkkent, создай метод для добавления символов, которому в качестве параметра нужно передавать char. Наиболее логично для этой цели использовать operator+=:
Код
class string
{
...
public:
...
   string& operator+=(char c) {
       //читай мое описаний реализации strcat, только надо учитывать, что длина строки равна 1 символу.
   }
...
};

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.