2009-06-24 11 views
0
class string 
{ 
    public: 
     friend istream& operator >> (istream& is, string& str); 
    private: 
     char *m_data; 
}; 

int main() 
{ 
    string str; 
    freopen("in.txt","r",stdin); 
    while(cin >> str) 
    { 
     cout < < str < < endl; 
    } 
    return 0; 
} 

der Gehalt an in.txt sind:Wie schreibe ich einen Überladungsoperator >> Funktion der Zeichenkette?

asdfsfgfdgdfg 

in der Überlastfunktion, i is.get() verwenden, um diese Charaters eins nach dem anderen, aber Programmsprung aus dem Kreis zu lesen, wenn Finish cin, bedeutet, dass cout wird nicht rennen. auf der anderen Seite versuche ich stattdessen getchar(), aber es kann nicht aus dem Kreis springen.

Frage: ist meine Idee zu dieser Funktion falsch? oder es gibt noch einen besseren Weg zu erfüllen. thx :)

=========================================== ========================================= new edit: hier mein Code: @Artem Barger Code Detail

#include <iostream> 

namespace Str 

{ 
    class string 
    { 
    public: 
     string():k(0){} 

    friend bool operator >> (std::istream& is, string& str) 
    { 
     int size = 100; 
     char m; 

     if((m = getchar()) && m == -1) 
      return false; 

     str.m_data = new char[size]; 

     do 
     { 
      if(str.k == size) 
      { 
       size *= 2; 
       char *temp = new char[size]; 
       for(int j = 0; j < str.k; ++j) 
       { 
        char *del = str.m_data; 
        temp[j] = *str.m_data++; 
        delete del; 
       } 
       str.m_data = temp; 
       temp = NULL; 
      } 

      str.m_data[str.k++] = m; 
     }while((m = getchar()) && m != -1); 

     return true; 
    } 

    friend void operator << (std::ostream& os, string& str) 
    { 
     os << str.m_data; 
     str.k = 0; 
     delete []str.m_data; 
    } 

private: 
    char *m_data; 
    int k; 
}; 
} 


using namespace Str; 
int main() 
{ 

string str; 

while(std::cin >> str) 
{ 
    std::cout << str; 
} 

return 0; 
} 

noch ein Problem in den Inhalt von

do 
{ 
}while(); 

Antwort

1

haben Vielleicht könnten Sie Ihren Code wie folgt neu schreiben, was Ihr Problem beheben sollte:

bool success = true; 

while (sucess) { 
    success = cin >> str; 
    cout << str; 
} 

Aber ich verstehe nicht, warum Sie immer noch die cout wollen, gehen Sie vor - wenn der cin Anruf nicht erfolgreich war, werden Sie nur den alten Inhalt der Zeichenfolge Druck werden - tun Sie nicht klar, es überall (es sei denn, Sie tun dies in anderem Code, den Sie hier nicht veröffentlicht haben).

Verwandte Themen