int an string anhaengen



  • Hmm, du könntest ja auch strtol verwenden:

    char* epos,*text=/*irgendein Stringwert*/;
    int i=strtol(text,&epos,10);
    if(epos==text)
      cout<<"Konvertierungsfehler\n";
    else if(*epos!='\0')
      cout<<"unvollständige Konvertierung, Reststring:"<<epos<<endl;
    

    "Hallo" würde hier zu einem Konvertierungsfehler führen, "0" problemlos erkannt (und "47elf" würde i auf 47 setzen und den Reststring "elf" ausspucken).



  • vielleicht irgentwie so:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    bool meinatoi(char *was1, int *was2)
    {
     if(was1[0] < '0' || was1[0] > '9')
     {
      return false;
     }
     *was2 = atoi(was1);
     return true;
    }
    
    int main(int argc, char *argv[])
    {
        int bla;
        if(!meinatoi("$",&bla))
        {
            cout << "fehler" << endl;
        }
        else
        {
            cout << bla << endl;
        }
        if(!meinatoi("7",&bla))
        {
            cout << "fehler" << endl;
        }
        else
        {
            cout << bla << endl;
        }
        if(!meinatoi("Hallo",&bla))
        {
            cout << "fehler" << endl;
        }
        else
        {
            cout << bla << endl;
        }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • Ja und? Sind eure selbstgemachten Beispiele kürzer als stringstream oder wie?

    Also, itoa hat nichts in einem sauberen C++ Projekt zu suchen. Es hat schon seinen Grund, warum es eine C++ Standardlib gibt.



  • Artchi schrieb:

    Ja und? Sind eure selbstgemachten Beispiele kürzer als stringstream oder wie?

    Also, itoa hat nichts in einem sauberen C++ Projekt zu suchen. Es hat schon seinen Grund, warum es eine C++ Standardlib gibt.

    Hää? Was willst du? Du fragst:

    Wie kann ich unterscheiden, ob 0 deshalb raus kommt, weil es richtig oder falsch war???

    Ich antworte mit der funktion die das macht. Wo ist das Problem? Von itoa war nie die Rede in meinem Beitrag??!

    mfg.



  • Sorry, meinte atoi... hab mich vertippt. Ändert aber an meiner Frage nichts: warum sollte ich atoi einsetzen anstatt stringstreams???



  • Artchi schrieb:

    Sorry, meinte atoi... hab mich vertippt. Ändert aber an meiner Frage nichts: warum sollte ich atoi einsetzen anstatt stringstreams???

    kA. Wollte dir nur zeigen dass das zeimlich einfach geht. naja was soll's, ist ja auch egal.

    mfg.



  • Ich glaub wenn die Standardlib bei Strings nicht so gruselig wäre würde auch kein Mensch mehr atoi benutzen. Bevor ich bei einem String-Stream wieder rausgefunden habe was clear und flush macht und das beides nicht das ist was ich will hab ich zehnmal atoi oder good old sprintf verwendet.



  • asdrubael schrieb:

    Ich glaub wenn die Standardlib bei Strings nicht so gruselig wäre würde auch kein Mensch mehr atoi benutzen. Bevor ich bei einem String-Stream wieder rausgefunden habe was clear und flush macht und das beides nicht das ist was ich will hab ich zehnmal atoi oder good old sprintf verwendet.

    vor allem wenn dann solche bekloppten sachen wie die winapi in c geschrieben sind. dann muss die ganze scheiße wieder umkonvertiert werden. Da bleib ich doch gleich bei denen.

    Aber wenn man sich richtig auskennt (was ich mich nicht tue), sind natürlich string und sstreams besser.

    mfg.



  • joomoo schrieb:

    Artchi schrieb:

    Sorry, meinte atoi... hab mich vertippt. Ändert aber an meiner Frage nichts: warum sollte ich atoi einsetzen anstatt stringstreams???

    kA. Wollte dir nur zeigen dass das zeimlich einfach geht. naja was soll's, ist ja auch egal.

    mfg.

    Mir ist durchaus bewusst, das ich mit weiteren C-Funktionen und if's zu dem Ziel hinkommen. Meine Frage auf Seite zwei war ja auch provokativ gemeint. Natürlich habt ihr mir die Bestätigung geliefert, das der C-Kram nicht kürzer ist als ein einfacher stringstream. Es ging darum, das jemand meinte, er findet stringstream vom Codeanteil her zu groß und atoi wäre ja kürzer. Stimmt aber nicht, weil in einer sicheren Programmumgebung viele Ausnahmefälle geprüft werden müssen, um Bugs zu verhindern. Das geht nur, wenn man mehr als nur atoi benutzt.

    Ergo kann man auch gleich stringstreams benutzen da dieses schon die Prüfungen durchführt, ohne das ich ein if und irgendwelche C-Stringfunktionen. Das war alles was ich sagen wollte.

    Wer es noch einfacher haben will (was ich auch in meinem ersten Post sagte, aber keiner reagiert hat) benutzt boost::lexical_cast.



  • joomoo schrieb:

    vor allem wenn dann solche bekloppten sachen wie die winapi in c geschrieben sind. dann muss die ganze scheiße wieder umkonvertiert werden. Da bleib ich doch gleich bei denen.

    Es gibt Smartwin! Wo die STL nicht ausreicht, wird dort boost verwendet. boost::lexical_cast ist auch dabei.


Anmelden zum Antworten