#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();
}
Реализация строки С++
Я реализовал класс со строками так, все вроде ничего, только я хочу чтобы если ещё раз вызвав конкатенацию, добавлять новое введенное мной слово в уже новое слово, а не в изначальное ( до первой попытки конкатенации) ??
Рализация метода strcat не верна. Да и в добавок куча утечек памяти.
Цитата:
если ещё раз вызвав конкатенацию
???
По классу:
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;
}
{
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;
}
Цитата: Нездешний
Не понял: что значит ???
По классу:
1. Определите деструктор
2. Определите конструктор копирования
3. Перегрузите функцию strcat для использования объектом вашего класса -- strcat(string& object)
4. Определите операции доступа к отдельным символам
По strcat -- например, так:
По классу:
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;
}
{
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;
}
Я понимаю, но у меня программа такая не запускается со всеми процедурами вместе..
Цитата: Nixus
Да и в добавок куча утечек памяти.
Вопрос не по теме: Есть ли какой-ть софт именно для поиска утечек? Если есть то какой. Заранее спасибо.