Advertisement
nex036ara

dinstring

Nov 27th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. //dinstring.hpp
  2.  
  3. //napisati klasu dinstring, preklapanje operatora +,+=,=,==,!=, []
  4.  
  5.  
  6. #ifndef DIN_STRING_DEF
  7. #define DIN_STRING_DEF
  8. #include <iostream>
  9. using namespace std;
  10.  
  11. class DinString {
  12.  
  13.     private:
  14.         char *text; //pokazivac na pocetak stringa
  15.         int duzina;
  16.     public:
  17.         DinString() {text=NULL; duzina=0;}
  18.         DinString(const char[]); //kod stringa se kraj prepoznaje preko '\0'
  19.         DinString(const DinString&);
  20.         ~DinString() {delete []text;}
  21.  
  22.         int lenght()const {return duzina;}
  23.         friend DinString operator+(const DinString&, const DinString&);
  24.         DinString& operator+=(const DinString&);
  25.         DinString& operator=(const DinString&);
  26.         friend bool operator!=(const DinString&, const DinString&);
  27.         friend bool operator==(const DinString&, const DinString&);
  28.         char& operator[](int);
  29.         char operator[](int)const;
  30.         friend ostream& operator<<(ostream&, const DinString&);
  31.     };
  32. #endif
  33. //dinstring.cpp
  34. #include "dinstring.hpp"
  35.  
  36. //konstruktor sa parametrima koji kreira string unesen preko tastature
  37. //raspolazem sa char *text, int duzina, (char a*, int n)
  38.  
  39. DinString:: DinString(const char ulazniStr[]){
  40.     duzina = 0;
  41.     while(ulazniStr[duzina]!= '\0') duzina++;
  42.         text = new char[duzina+1];
  43.  
  44.         for(int i=0; i<duzina; i++)
  45.         text[i] = ulazniStr[i];
  46.         text[duzina] = '\0';
  47.  
  48. }
  49.  
  50.      //sad imam konstruktor preko koga kreiram string, sada su mi polja klase stvarni parametri
  51. DinString::   DinString(const DinString &ds){
  52.    duzina = ds.duzina;
  53.    text = new char[duzina+1];
  54.         for(int i=0; i<duzina; i++)
  55.             text[i] = ds.text[i];
  56.             text[duzina] = '\0';
  57.  
  58. }
  59.  
  60. //kod prijateljskih 'ne diram nista', ostje samo tip
  61. DinString operator+(const DinString &ds1, const DinString &ds2){
  62.     //kod sabiranja stringa/niza mora postojati tmp
  63.  
  64.     DinString tmp;
  65.     tmp.duzina = ds1.duzina + ds2.duzina;
  66.     tmp.text = new char[tmp.duzina+1];
  67.         for(int i=0; i<ds1.duzina; i++)
  68.             tmp.text[i] = ds1.text[i];
  69.         for(int j=0; j<ds2.duzina; j++)
  70.             tmp.text[ds1.duzina +j] = ds2.text[j];
  71.         tmp.text[tmp.duzina] = '\0';
  72.     return tmp;
  73. }
  74.         //neprijateljski operatori vracaju referencu i posle tipa se navodi klasa
  75.         DinString& DinString:: operator+=(const DinString &ds){
  76.             //trebace mi privremeni string
  77.             //kombinacija duzina, ds.duzina...
  78.  
  79.  
  80.             int i;
  81.             char *tmpText = new char[duzina+ds.duzina+1];
  82.                 for(i=0; i<duzina; i++)
  83.                     tmpText[i] = text[i];
  84.                 for(i=0; i<ds.duzina; i++)
  85.                     tmpText[duzina+i] = ds.text[i];
  86.                 tmpText[duzina + ds.duzina] = '\0';
  87.             duzina += ds.duzina;
  88.             delete []text;
  89.             text = tmpText;
  90.     return *this;
  91.         }
  92.         //a=b   a=a?
  93.         DinString& DinString:: operator=(const DinString &ds){
  94.  
  95.         if(this != &ds)
  96.         {
  97.             delete []text;
  98.             duzina = ds.duzina;
  99.             text = new char [duzina+1];
  100.                 for(int i=0; i<duzina; i++)
  101.                     text[i] = ds.text[i];
  102.                     text[duzina] = '\0';
  103.  
  104.         }
  105.  
  106.         return *this;
  107.         }
  108.  
  109.  
  110.  
  111.         bool operator!=(const DinString &ds1, const DinString &ds2){
  112.             if(ds1.duzina!= ds2.duzina) return true;
  113.                 for(int i=0; i<ds1.duzina; i++)
  114.                     if(ds1.text[i]!= ds2.text[i]) return true;
  115.                 return false;
  116.         }
  117.  
  118.         bool operator==(const DinString &ds1, const DinString &ds2){
  119.             if(ds1.duzina!=ds2.duzina) return false;
  120.                 for(int i=0; i<ds1.duzina; i++)
  121.                 if(ds1.text[i]!= ds2.text[i]) return false;
  122.                     return true;
  123.         }
  124.  
  125.         char& DinString::operator[](int i){
  126.             return text[i];
  127.         }
  128.         char DinString:: operator[](int i) const{
  129.             return text[i];
  130.         }
  131.         ostream& operator<<(ostream &out, const DinString &ds){
  132.             if(ds.duzina>0)
  133.                 out<<ds.text;
  134.                 return out;
  135.         }
  136. //main.cpp
  137. //napisati klasu dinstring, preklapanje operatora +,+=,=,==,!=, []
  138.  
  139.  
  140. #include "dinstring.hpp"
  141.  
  142. int main() {
  143.     DinString s1, s2("Perina"), s3("Kara");
  144.  
  145.     cout<<"s1: "<<s1<<endl;
  146.     cout<<"s2: "<<s2<<endl;
  147.     cout<<"s3: "<<s3<<endl;
  148.     cout<<"s2+s3: "<<(s2+" "+s3)<<endl;
  149.     cout<<"s1+=s2: "<<(s1+=s2)<<endl;
  150.     cout<<"s2+=s3: "<<(s2+=s3)<<endl;
  151.     char x= s2[3];
  152.     cout<<"s2[3]: "<<x<<endl;
  153.     char a = s2[3] = 'o';
  154.     char b = s2[4] = 'v';
  155.     cout<<"s2: "<<s2<<endl;
  156.     cout<<"(s1==s2?)" <<(s1==s2)<<endl;
  157.     cout<<"s3 = s1: " <<(s3=s1)<<endl;
  158.     cout<<"duzina s2:"<<s2.lenght()<<endl;
  159. return 0;
  160. }
  161.  
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement