Új hozzászólás Aktív témák
-
Zulfaim
csendes tag
Szevasztok!
Bufferelten kezelt fájlt kellene írnom c++-ban OO-an.
Csináltam egy buffer osztályt, ahol tárolok egy pointert és a méretet.
Ennek kéne működnie:
buffer+=szoveg;
ahol mindketten string-et tároló tömbök.
a szoveget is úgy tárolom, hogy pointer+méret, de azt a main()-ben hozom létre.
Ezt operátor overloaddal kéne megoldani, de nem tudom hogy.
Tudna valaki segíteni? -
Zulfaim
csendes tag
class buffer {
char* buff;
int size;
public:
//buffer() : buff(0), size(0){}
buffer(int s=10){buff=new char[size=s];}
buffer(const buffer&);
buffer& operator=(const buffer&);
friend ostream& operator<<(ostream& s, const buffer b);
~buffer(){ delete[] buff; }
buffer& buffer:perator=(const char* value)
{
delete[] buff;
if( size=strlen(value))
{
buff=new char[size+1];
strncpy(buff,value,size);
}
return *this;
}
};
buffer::buffer(const buffer& e)
{
buff=new char[size=e.size];
for(int i;i<size;i++)
{
buff=e.buff;
}
}
buffer& buffer:perator=(const buffer& e)
{
if( this!= &e)
{
delete[] buff;
buff=new char[size=e.size];
for(int i=0;i<size;i++)
{
buff=e.buff;
}
}
return *this;
}
ostream& operator<<(ostream& s, const buffer b)
{
for(int i=0;i<b.size;i++)
{
s << b.buff;
}
return(s);
}
int main()
{
buffer b;
b=''xyz'';
b+=''-=EZ A BUFFERHEZ FUZOTT RESZ=-'';
cin.get();
return 0;
}
Ezzel mi a baj?
[Szerkesztve] -
Zulfaim
csendes tag
már megvan.
Valaki tudna segíteni, hogy hogy lehetne ezt még kibővíteni egy operator+= overloaddal? -
Zulfaim
csendes tag
buffer& buffer:perator+=( const char* value)
{
char* temp=new char[size+strlen(value)+1];
if(value)
{
strcpy(temp,buff);
strcpy(temp + strlen(buff), value);
delete[] buff;
buff = temp;
}
return *this;
}
int main()
{
char s[7]=''BUFFER'';
buffer b;
b=s;
cout<<b;
b+=s;
cout<<b;
cin.get();
return 0;
}
nem működik rendesen. -
Zulfaim
csendes tag
nem tudom hova feltölteni.
#include <cstring>
#include <iostream>
using namespace std;
class buffer {
char* buff;
int size;
public:
buffer(){buff=''ZZZ''; size=3;}
buffer(const buffer&);
buffer& operator=(const buffer&);
friend ostream& operator<<(ostream& s, const buffer b);
~buffer(){ delete[] buff; }
buffer& buffer:: operator+=( const char* value)
{
char* temp=new char[strlen(buff)+1];
strcpy(temp,buff);
if(size+=strlen(value))
{
delete[] buff;
buff=new char[size+1];
strcpy(buff,temp);
strcpy(buff+strlen(value),value);
}
delete[] temp;
return *this;
}
buffer& buffer:: operator=(const char* value)
{
delete[] buff;
if( size=strlen(value))
{
buff=new char[size+1];
strcpy(buff,value);
}
cout<<''__az '=' this-je__''<<*this;
return *this;
}
};
buffer::buffer(const buffer& e)
{
buff=new char[size=e.size];
for(int i;i<size;i++)
{
buff=e.buff;
}
}
buffer& buffer:: operator=(const buffer& e)
{
if( this!= &e)
{
delete[] buff;
buff=new char[size=e.size];
for(int i=0;i<size;i++)
{
buff=e.buff;
}
}
return *this;
}
ostream& operator<<(ostream& s, const buffer b)
{
for(int i=0;i<b.size;i++)
{
s<<b.buff;
}
return (s);
}
int main()
{
char s[7]=''BUFFER'';
buffer b;
cout<<b;
b=s;
cout<<b;
cout<<endl;
b+=s;
cout<<b;
cin.get();
return 0;
}
most az a baj vele, hogy a this-be ilyen baromságokat rak( memóriaszemét), de nem tudom, hogy mitől kapja. Nem hiszem, hogy a konstruktor hibája lenne. -
Zulfaim
csendes tag
Most a program beolvasás részét próbálom megoldani, de valami probléma van vele.
int karakterek_szama()
{
fstream fp(''c:\\txt.txt'',ios::in);
char s[100];
int k=0;
while(fp>>s)
++k;
fp.close();
return k;
}
istream& operator>>(istream& s, buffer b)
{
int k=karakterek_szama();
delete[] b.buff;
b.buff=new char[(b.size=k)+1];
for(int i=0;i<b.size;++i)
{
s>>b.buff;
}
return (s);
}
void beolvas(buffer b)
{
fstream fp(''c:\\txt.txt'',ios::in);
while(fp>>b.buff)
fp.close();
}
A karakterek_szama() fgv.-el meghatározom, hogy mennyi memóriaterület kell.
Ezt lefoglalom és kiolvasom a fájl tartalmát.
A beolvas függvény friend.
Nem működik.
[Szerkesztve] -
Zulfaim
csendes tag
Befejeztem.
Ez lett a vége:
#include <cstring>
#include <iostream>
#include <fstream>
using namespace std;
class buffer {
char* buff;
int size;
public:
buffer():buff(0),size(0){}
buffer(const buffer&);
buffer& operator=(const buffer&);
buffer& operator+=(const buffer&);
bool operator==(const buffer&);
buffer& buffer:: operator+=( const char*);
buffer& buffer:: operator=(const char*);
bool buffer:: operator==(const char*);
friend void beolvas(buffer &);
friend void kiir(buffer &);
friend ostream& operator<<(ostream& s, const buffer b);
friend istream& operator>>(istream& s, const buffer b);
~buffer(){ delete[] buff; }
};
buffer::buffer(const buffer& e)
{
buff=new char[(size=e.size)+1];
if (e.buff)
strcpy(buff,e.buff);
}
buffer& buffer:: operator+=( const char* value)
{
char* temp=new char[size = strlen(buff)+ strlen(value) +1];
strcpy(temp,buff);
strcat(temp, value);
delete[] buff;
buff = temp;
return *this;
}
buffer& buffer:: operator+=(const buffer& e)
{
char* temp=new char[size+=(e.size+1)];
strcpy(temp,buff);
strcat(temp,e.buff);
delete[] buff;
buff=temp;
return *this;
}
buffer& buffer:: operator=(const char* value)
{
delete[] buff;
if( size=strlen(value))
{
buff=new char[size+1];
strcpy(buff,value);
}
return *this;
}
buffer& buffer:: operator=(const buffer& e)
{
if( this!= &e)
{
delete[] buff;
buff=new char[size=e.size];
strcpy(buff,e.buff);
}
return *this;
}
bool buffer:: operator==(const char* value)
{
if(size==strlen(value)) return true;
else return false;
}
bool buffer:: operator==(const buffer& e)
{
if(size==e.size) return true;
else return false;
}
ostream& operator<<(ostream& s, const buffer b)
{
for(int i=0;i<b.size;++i)
{
s<<b.buff;
}
return (s);
}
int karakterek_szama()
{
fstream fp(''c:\\txt.txt'',ios::in);
char c;
int k=0;
while(!fp.eof())
{
fp.get(c);
++k;
}
fp.close();
return k;
}
istream& operator>>(istream& s, buffer b)
{
int k=karakterek_szama();
delete[] b.buff;
b.buff=new char[(b.size=k)+1];
for(int i=0;i<b.size;++i)
{
s>>b.buff;
}
return (s);
}
void beolvas(buffer& b)
{
int k=karakterek_szama();
delete[] b.buff;
b.buff=new char[(b.size=k)+1];
fstream fp(''c:\\txt.txt'',ios::in);
while(!fp.eof())
{
fp.getline(b.buff,b.size);
}
fp.close();
}
void kiir(buffer& b)
{
fstream fp(''c:\\txt.txt'',ios:ut);
fp<<b.buff;
fp.close();
}
int main()
{
buffer b;
buffer a;
beolvas(b);
char s[7]=''+FUZES'';
char s2[11]=''ASDFWERGWE'';
a=s2;
cout<<(a==b);
cout<<endl;
b+=s;
cout<<b;
cout<<endl;
b+=a;
cout<<b;
kiir(b);
cin.get();
return 0;
}
[Szerkesztve] -
Zulfaim
csendes tag
Utólag:
4-es lett a házim.
Kösz a segítséget mindenkinek! -
Zulfaim
csendes tag
Valaki leírná nekem egy példán keresztül szemléltetve, az iterátor használatát?
Előre is köszi.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- ASUS routerek
- Otthoni hálózat és internet megosztás
- Milyen légkondit a lakásba?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Vodafone mobilszolgáltatások
- A fociról könnyedén, egy baráti társaságban
- YouTube
- Épített vízhűtés (nem kompakt) topic
- EAFC 24
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- További aktív témák...
- HP ProBook 430 G6, 13,3" FULL HD IPS, I5-8265U, 8GB DDR4, 256GB SSD, WIN 10/11, SZÁMLA, GARANCIA
- Dell Latitude 3420, 14" FULL HD IPS, I5-1145G7 CPU, 8GB DDR4, 256GB SSD, W11, Számla, Garancia
- Dell Latitude 7280, 12,5" FHD IPS Kijelző, I5-6300U, 8GB DDR4, 256GB SSD, WIN 10, Számla, garancia
- Lenovo ThinkPad X280, 12,5" HD Kijelző, I5-8250U CPU, 8GB DDR4, 256GB SSD, WIN 10/11, Számla, Garanc
- Lenovo ThinkPad L490, 14" FHD IPS Kijelző, I5-8265U CPU, 8GB DDR4, 256GB SSD, WIN 10/11, Számla, Gar