2016-09-26 2 views
1

Ich versuche zu überprüfen, ob eine Zeichenfolge Darstellung angegebene Ganzzahl entspricht. Ich soll Stringstream dafür in einer Funktion verwenden. Ich habe auch eine operator= für diese auch.Versuchen, eine Zeichenfolge in einen Int mit Stringstream zu konvertieren

Ich bin ein wenig verwirrt darüber, wie man diese zusammen ausführt und wenn ich etwas verpasse. Dies ist das letzte Bit zu einer Aufgabe, die ich habe, dies ist nur ein kleiner Ausschnitt meines gesamten Programms. Ich kann nicht viele Anleitungen dazu finden, und ich spüre, dass sie mich alle zu Atoi oder Atod führen, die ich nicht benutzen darf.

#ifndef INTEGER 
#define INTEGER 
using std::string; 
class Integer 
{ 
private: 
    int intOne; 
    string strOne; 
public: 
    Integer() { 
     intOne = 0; 
    } 
    Integer(int y) { 
     intOne = y; 
    } 
    Integer(string x) { 
     strOne = x; 
    } 
    void equals(string a); 
    Integer &operator=(const string*); 
    string toString(); 
}; 

#endif 

In diesem Header bin ich nicht sicher, welches Argument ich für den Operator = verwenden soll.

#include <iostream> 
#include <sstream> 
#include <string> 
#include "Integer.h" 
using namespace std; 

Integer &Integer::operator=(const string*) 
{ 
    this->equals(strOne); 
    return *this; 
} 

void Integer::equals(string a) 
{ 
    strOne = a; 
    toString(strOne); 
} 

string Integer::toString() 
{ 
    stringstream ss; 
    ss << intOne; 
    return ss.str(); 
} 



#include <iostream> 
#include <cstdlib> 
#include <conio.h> 
#include <string> 
#include <ostream> 
using namespace std; 
#include "Menu.h" 
#include "Integer.h" 
#include "Double.h" 



int main() 
{ 
    Integer i1; 
    i1.equals("33"); 
    cout << i1; 
} 

Sorry, wenn seine schlechte Frage, die ich mit dieser Art der Zuordnung nicht allzu vertraut bin und jede Hilfe nehme ich bekommen kann. Vielen Dank.

Antwort

0

können Sie std::to_strig() verwenden, mit dem Sie von int in eine Zeichenfolge konvertieren können, die die gleiche Zahl darstellt.

0

Also wenn ich richtig verstehe, möchten Sie den Operator = überladen, und das ist eine schlechte Idee, da operator= für die Zuordnung nicht zum Vergleich verwendet wird.

Die richtige Unterschrifts ist:

ReturnType operator==(const TypeOne first, const TypeSecond second) [const] // if outside of class 
ReturnType operator==(const TypeSecond second) [const] // if inside class 

Da Sie keine Zeichenfolge vergleichen können auf ganzzahlige (sie sind verschiedene Typen), müssen Sie Ihre comparisment Funktion schreiben, da Sie keinen haben ich werde für Sie schreiben:

bool is_int_equal_string(std::string str, int i) 
{ 
    std::string tmp; 
    tmp << i; 
    return tmp.str() == i; 
} 

Last but not least, müssen Sie diese beiden verschmelzen, in einem bequemen Betreiber:

// inside your Integer class 
bool operator==(std::string value) const 
{ 
    std::stringstream tmp; 
    tmp << intOne; 
    return tmp.str() == ref; 
} 

Jetzt können Sie diesen Operator verwenden, genau wie jede andere:

Integer foo = 31; 
if (foo == "31") 
    cout << "Is equal" << endl; 
else 
    cout << "Is NOT equal" << endl; 

Ich hoffe, das hilft.

0

Wenn Sie std::to_string verwenden dürfen, dann wäre es das Beste.

Andernfalls könnten Sie eine Funktion erstellen, die Gleichheit zwischen der Saite und der ganzen Zahl mit der Verwendung von std::stringstream zu handhaben:

Beispiel: dieser

bool Integer::equal(const string& str) 
{ 
    stringstream ss(str); 
    int str_to_int = 0; 
    ss >> str_to_int; 

    if (intOne == str_to_int) 
     return true; 
    else 
     return false; 
} 

Kombinieren mit einer if Aussage:

int main() 
{ 
    Integer i{100}; 

    if (i.equal("100")) 
     cout << "true" << endl; 
    else 
     cout << "false" << endl; 
} 
Verwandte Themen