Results 1 to 10 of 10

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User MrShadow's Avatar
    Join Date: Jul:2007
    Location: Êúì ãðîáèùàòà
    Posts: 2,606

    C++ - ostream ãðåøåí output â êîíçîëàòà

    Çäðàâåéòå,
    Çà çàäà÷à èìàì äà íàïðàâÿ ñîáñòâåíà èìïëåìåíòàöèÿ íà string êëàñúò (ïîíå íà ÷àñò îò íåãî äå). Îáùî âçåòî ñúì ãîòîâ, íî ñðåùíàõ ñëåäíèÿ ïðîáëåì.

    Code:
    abcdefg
    1
    1
    1&  @☼>Press any key to continue . . .
    Ïðîáëåìúò å â ïîñëåäíèÿ ðåä - ñèìâîëèòå.

    Åòî main() êîéòî å íàïðàâåí ñàìî çà òåñò

    Code:
    int main(){
        String a("abcdefgh");
        cout<<a<<endl;
        String b;
        String c = a;
        cin >> b;
        cout << b << endl;
        cout << c;
        system("PAUSE");
        return 0;
    }
    è overload-a íà << (äåêëàðèðàë ñúì ãî êàòî friend, çà äà èìà äîñòúï äî data members):

    Code:
    ostream& operator<<(ostream& out,const String a){
             if(a.length == 0) { return out;}
             for(int i = 0; i<a.length; i++){
                     out<<a.s[i];
             }
             return out;
    }
    Êàêòî ñå âèæäà, êîíñòðóêòîðà è êîïè êîíñòðóêòîðà ðàáîòÿò. >> ðàáîòè, çàùîòî b ñå âçèìà è ñå èçâåæäà áåç ïðîáëåì. Íî ïîñëå ðåøàâà îòíîâî äà èçâåäå b + ñëó÷àéíè ñèìâîëè äîïúëâàùè äî áðîÿ ñèìâîëè êîèòî òðÿáâà äà ñà â c. Íÿìàì èäåÿ çàùî ñå ïîëó÷àâà òàêà


    Åäèò: Îïèòàõ ïúðâî äà èçâåäà C ïðåäè äà èçâåæäàì B è ÍßÌÀ ïðîáëåìè (èçâåæäà ñè abcdefgh). Ñàìî â òàçè ïîñëåäîâàòåëíîñò èìà.

  2. #2
    Registered User
    Join Date: Jul:2004
    Location: Ñîôèÿ
    Posts: 621
    Êîíñòðóêòîðèòå èçãëåæäàò ñúìíèòåëíè - ãóáè ñå åäíî "h" ïðè îòïå÷àòâàíåòî íà ñòðèíã À, îñâåí (ä)åôåêòà ñúñ ñòðèíã Ñ. Äàé ãè êàòî êîä, ïëç, çàåäíî ñ äåêëàðàöèèòå íà member-èòå.

    // îôô: Êàòî ìàëêà ñòðàíè÷íà áåëåæêà, â operator<< ìîæåø äà ìèíåø è áåç ïðîâåðêàòà "if(a.length == 0)". Àêî À å ïðàçåí ñòðèíã, for-öèêúëúò ùå ñå èçïúëíè íóëà ïúòè è íàêðàÿ ïàê ùå ñå âúðíå out. Íå ÷å òàêà å ãðåøíî, íî ïîíå àç íå ñúì ôåí íà èçëèøíèòå ïðîâåðêè íà ãðàíè÷íè ñëó÷àè

  3. #3
    Registered User MrShadow's Avatar
    Join Date: Jul:2007
    Location: Êúì ãðîáèùàòà
    Posts: 2,606
    Quote Originally Posted by DimKo View Post
    Êîíñòðóêòîðèòå èçãëåæäàò ñúìíèòåëíè - ãóáè ñå åäíî "h" ïðè îòïå÷àòâàíåòî íà ñòðèíã À, îñâåí (ä)åôåêòà ñúñ ñòðèíã Ñ. Äàé ãè êàòî êîä, ïëç, çàåäíî ñ äåêëàðàöèèòå íà member-èòå.

    // îôô: Êàòî ìàëêà ñòðàíè÷íà áåëåæêà, â operator<< ìîæåø äà ìèíåø è áåç ïðîâåðêàòà "if(a.length == 0)". Àêî À å ïðàçåí ñòðèíã, for-öèêúëúò ùå ñå èçïúëíè íóëà ïúòè è íàêðàÿ ïàê ùå ñå âúðíå out. Íå ÷å òàêà å ãðåøíî, íî ïîíå àç íå ñúì ôåí íà èçëèøíèòå ïðîâåðêè íà ãðàíè÷íè ñëó÷àè
    Òîâà ñ "h"-à ñúì ãî îïðàâèë, ìîÿ ãðåøêà ñè áåøå è çà ñúæàëåíèå íå îïðàâÿ íåùàòà

    Åòî ãî ñàìèÿ êëàñ + êîíñòðóêòîðèòå.

    Code:
    class String{
          public:
                 String();
                 String(char* c);
                 ~String();
                 String(const String& s);
                 String& operator =(const String& b);
                 bool operator==(String b);
                 bool operator<(String b);
                 bool operator>(String b);
                 String& operator+(String b);
                 int strlen();
                 friend ostream& operator<<(ostream& out,const String a);
                 friend istream& operator>>(istream& in, String& a);
          private:
                  char* s;      
                  int length;
                  int size;
    };
    
    String::String(){
                     length = 0;
                     size = 0;
    }
    
    String::String(char* c){
                         int counter = 0;
                         while( c[counter] != '\0'){
                                counter++;      
                         }
                         
                         length = counter;
                         size = 2*counter;
                         s = new char[size];
                         
                         for(int i=0; i<length; i++){
                                 s[i] = c[i];
                         }
    }
    
    
    String::String(const String& STR){
                          length = STR.length;
                          size = STR.size;
                          s = new char[size];
                          for(int i=0; i<length; i++){
                                  s[i] = STR.s[i];
                          }
    }
    
    
    
    String::~String(){
                      delete[] s;
    }
    
    String& String::operator=(const String& b){
            if ( this == &b ) { return *this; }
            delete[] s;
            s = new char[b.size];
            size = b.size;
            length = b.length;
            for(int i=0; i<length; i++){
                    s[i] = b.s[i];
            }
            return *this;
    }

  4. #4
    Registered User
    Join Date: Jul:2004
    Location: Ñîôèÿ
    Posts: 621
    Îùå íåùî: Âñåêè ïúò êîãàòî ñå âèêà operator<<, ñòðèíãúò ïîäàäåí êàòî âòîðè ïàðàìåòúð ñå ïðåäàâà ïî ñòîéíîñò, ò.å. ìó ñå âèêà copy-êîíñòðóêòîð-à è ìåòîäúò operator<< ðàáîòè ñ êîïèåòî. Âåðîÿòíî íå èñêàø äà ïðàâèø òàêà :-) Çà öåëòà, ïî-äîáðå å ïàðàìåòúðúò äà ñå ïîäàâà ïî reference: "const String& a."

    Ñåãà ùå ðàçãëåäàì îñòàíàëîòî...

  5. #5
    Registered User MrShadow's Avatar
    Join Date: Jul:2007
    Location: Êúì ãðîáèùàòà
    Posts: 2,606
    Quote Originally Posted by DimKo View Post
    Îùå íåùî: Âñåêè ïúò êîãàòî ñå âèêà operator<<, ñòðèíãúò ïîäàäåí êàòî âòîðè ïàðàìåòúð ñå ïðåäàâà ïî ñòîéíîñò, ò.å. ìó ñå âèêà copy-êîíñòðóêòîð-à è ìåòîäúò operator<< ðàáîòè ñ êîïèåòî. Âåðîÿòíî íå èñêàø äà ïðàâèø òàêà :-) Çà öåëòà, ïî-äîáðå å ïàðàìåòúðúò äà ñå ïîäàâà ïî reference: "const String& a."

    Ñåãà ùå ðàçãëåäàì îñòàíàëîòî...
    Âñúùíîñò òî÷íî òîâà ðåøè ïðîáëåìà êàòî ïðîáâàõ ñåãà. Íÿêàêâà èäåÿ çàùî?

  6. #6
    Registered User
    Join Date: Jul:2004
    Location: Ñîôèÿ
    Posts: 621
    Íå ñúì ñúâñåì ñèãóðåí - êàòî öÿëî îñòàíàëèÿ êîä èçãëåæäà íàðåä. Èçîëèðàíåòî íà ïðîáëåìà å åäíî ñúâñåì íå-ëîøî óïðàæíåíèå

    Äðóãî... Äîáðå å äà ñëîæèø "s = NULL;" â default-íèÿ êîíñòðóêòîð, çàùîòî âñå â åäèí ìîìåíò ñå âèêà "delete[] s" - íå ïîìíÿ âå÷å äàëè Ñ++ èíèöèàëèçèðàøå ñàì ìåìáúðèòå. Âúâ âòîðèÿ êîíñòðóêòîð ìîæå äà ïðîâåðÿâàø çà ñëó÷àÿ "c == NULL". Ìîæå äà ïîëçâàø è ôóíêöèèòå strlen() è memcpy() âìåñòî ÷àñò îò öèêëèòå.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Copyright © 1999-2011 Õàðäóåð ÁÃ. Âúçìîæíî å ñúäúðæàíèåòî íà òàçè ñòðàíèöà äà å îáåêò íà àâòîðñêè ïðàâà.
iskamPC.com | mobility.BG | Bloody's Techblog | Êðèïòîâàëóòè è ìàéíèíã | 3D Vision Blog | Ìàãàçèí çà åëåêòðîííè öèãàðè