Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //dinstring.hpp
- //napisati klasu dinstring, preklapanje operatora +,+=,=,==,!=, []
- #ifndef DIN_STRING_DEF
- #define DIN_STRING_DEF
- #include <iostream>
- using namespace std;
- class DinString {
- private:
- char *text; //pokazivac na pocetak stringa
- int duzina;
- public:
- DinString() {text=NULL; duzina=0;}
- DinString(const char[]); //kod stringa se kraj prepoznaje preko '\0'
- DinString(const DinString&);
- ~DinString() {delete []text;}
- int lenght()const {return duzina;}
- friend DinString operator+(const DinString&, const DinString&);
- DinString& operator+=(const DinString&);
- DinString& operator=(const DinString&);
- friend bool operator!=(const DinString&, const DinString&);
- friend bool operator==(const DinString&, const DinString&);
- char& operator[](int);
- char operator[](int)const;
- friend ostream& operator<<(ostream&, const DinString&);
- };
- #endif
- //dinstring.cpp
- #include "dinstring.hpp"
- //konstruktor sa parametrima koji kreira string unesen preko tastature
- //raspolazem sa char *text, int duzina, (char a*, int n)
- DinString:: DinString(const char ulazniStr[]){
- duzina = 0;
- while(ulazniStr[duzina]!= '\0') duzina++;
- text = new char[duzina+1];
- for(int i=0; i<duzina; i++)
- text[i] = ulazniStr[i];
- text[duzina] = '\0';
- }
- //sad imam konstruktor preko koga kreiram string, sada su mi polja klase stvarni parametri
- DinString:: DinString(const DinString &ds){
- duzina = ds.duzina;
- text = new char[duzina+1];
- for(int i=0; i<duzina; i++)
- text[i] = ds.text[i];
- text[duzina] = '\0';
- }
- //kod prijateljskih 'ne diram nista', ostje samo tip
- DinString operator+(const DinString &ds1, const DinString &ds2){
- //kod sabiranja stringa/niza mora postojati tmp
- DinString tmp;
- tmp.duzina = ds1.duzina + ds2.duzina;
- tmp.text = new char[tmp.duzina+1];
- for(int i=0; i<ds1.duzina; i++)
- tmp.text[i] = ds1.text[i];
- for(int j=0; j<ds2.duzina; j++)
- tmp.text[ds1.duzina +j] = ds2.text[j];
- tmp.text[tmp.duzina] = '\0';
- return tmp;
- }
- //neprijateljski operatori vracaju referencu i posle tipa se navodi klasa
- DinString& DinString:: operator+=(const DinString &ds){
- //trebace mi privremeni string
- //kombinacija duzina, ds.duzina...
- int i;
- char *tmpText = new char[duzina+ds.duzina+1];
- for(i=0; i<duzina; i++)
- tmpText[i] = text[i];
- for(i=0; i<ds.duzina; i++)
- tmpText[duzina+i] = ds.text[i];
- tmpText[duzina + ds.duzina] = '\0';
- duzina += ds.duzina;
- delete []text;
- text = tmpText;
- return *this;
- }
- //a=b a=a?
- DinString& DinString:: operator=(const DinString &ds){
- if(this != &ds)
- {
- delete []text;
- duzina = ds.duzina;
- text = new char [duzina+1];
- for(int i=0; i<duzina; i++)
- text[i] = ds.text[i];
- text[duzina] = '\0';
- }
- return *this;
- }
- bool operator!=(const DinString &ds1, const DinString &ds2){
- if(ds1.duzina!= ds2.duzina) return true;
- for(int i=0; i<ds1.duzina; i++)
- if(ds1.text[i]!= ds2.text[i]) return true;
- return false;
- }
- bool operator==(const DinString &ds1, const DinString &ds2){
- if(ds1.duzina!=ds2.duzina) return false;
- for(int i=0; i<ds1.duzina; i++)
- if(ds1.text[i]!= ds2.text[i]) return false;
- return true;
- }
- char& DinString::operator[](int i){
- return text[i];
- }
- char DinString:: operator[](int i) const{
- return text[i];
- }
- ostream& operator<<(ostream &out, const DinString &ds){
- if(ds.duzina>0)
- out<<ds.text;
- return out;
- }
- //main.cpp
- //napisati klasu dinstring, preklapanje operatora +,+=,=,==,!=, []
- #include "dinstring.hpp"
- int main() {
- DinString s1, s2("Perina"), s3("Kara");
- cout<<"s1: "<<s1<<endl;
- cout<<"s2: "<<s2<<endl;
- cout<<"s3: "<<s3<<endl;
- cout<<"s2+s3: "<<(s2+" "+s3)<<endl;
- cout<<"s1+=s2: "<<(s1+=s2)<<endl;
- cout<<"s2+=s3: "<<(s2+=s3)<<endl;
- char x= s2[3];
- cout<<"s2[3]: "<<x<<endl;
- char a = s2[3] = 'o';
- char b = s2[4] = 'v';
- cout<<"s2: "<<s2<<endl;
- cout<<"(s1==s2?)" <<(s1==s2)<<endl;
- cout<<"s3 = s1: " <<(s3=s1)<<endl;
- cout<<"duzina s2:"<<s2.lenght()<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement