String zu Integer oder Long konvertieren?



  • Also ich wollte jetzt eine Textdatei einlesen in der Zahlen stehen. Am Anfang einer jeden Zeile die Zahl, die der array-index sein soll in dem es dann gespeichert wird.

    int _tmain(int argc, _TCHAR* argv[])
    {
    	ifstream fin("text.txt");
    	string buffer;
    	string* array[255][3];
    
    	cout << "Hier Inhalt der Datei:\n";
    	while (fin.good())
    	{
    		getline(fin,buffer,'=');
    		strcpy(array[strtol(buffer)],getline(fin,buffer,'\n'));
    	}
    	cout << array[0] << array[1]<<endl; //bloß zur Probe, ob das auch klappt
    	system("Pause");
    	return 0;
        }
    

    Tja, mein Problem ist, dass strtol mit bloß ausspruckt, dass es mit nur einem Argument nicht will, da keine "overloaded function" bloß 1 Argument nimmt... Ich hab aber nachgelesen und die anderen beiden Parameter sind optional...

    Wäre schön, wenn mir hier jemand auf die Sprünge helfen könnte.

    cYa,

    Tauwasser



  • man: strtol stammt noch aus C-Zeiten - und damals gab es noch keine optionalen Parameter (du kannst aber jeweils 0 angeben - oder du nimmst die 1-Parameter-Version atol).

    Übrigens gibt getline() auch nichts zurück, womit strcpy() etwas anfangen könnte.



  • CStoll schrieb:

    Übrigens gibt getline() auch nichts zurück, womit strcpy() etwas anfangen könnte.

    Wie meinst Du das? Der Kompiler meckert nicht...

    Und atol habe ich schon probiert, aber da kommt ein fehler, dass er string nicht nach char umwandeln kann... Dämliches getue mit char und string -_-"

    cYa,

    Tauwasser



  • schau ins c++ faq, hume sikkins hat dort einmal string nach zahl und zurück verewigt.



  • Ok, aber wozu gibt es dann die dumme string-klasse überhaupt, wenn absolut NIX mit ihr arbeiten kann? Und andersherum, getline() geht mit einen char nicht... das habe ich schon ausprobiert, da hat er zu wenige argumente...

    cYa,

    Tauwasser



  • Tauwasser schrieb:

    Ok, aber wozu gibt es dann die dumme string-klasse überhaupt, wenn absolut NIX mit ihr arbeiten kann? Und andersherum, getline() geht mit einen char nicht... das habe ich schon ausprobiert, da hat er zu wenige argumente...

    cYa,

    Tauwasser

    hä??
    getline ist mehrfach vorhanden.
    einfach auf cppreference.com mal schaun.

    fürs umwandeln schau ins faq c++.



  • Ja aber ich will dieses getline nutzen und nicht fin.getline. Da muss ich ja auch mit soeinem char-dingens arbeiten...das geht doch dann aber wieder mit dem array nicht :|

    Und von soner tollen Programmiersprache hätte ich eigentlich erwartet, dass es ein paar gescheite Funktionen zum Umwandeln von Datentypen gibt :|

    cYa,

    Tauwasser



  • Gibt es auch - siehe C++ FAQ (du solltest dich endlich auf den Weg machen, das zu lesen).

    Und wenn du unbedingt C-Funktionen verwenden willst für die Umwandlung: std::string bietet ganz bewußt keine implizite Typumwandlung nach char* (zu fehleranfällig), aber dafür eine explizite Umwandlung mit der Methode c_str().

    Wie meinst Du das? Der Kompiler meckert nicht...

    Zufall - getline() liefert den gelesenen Stream zurück (für Fehlerauswertungen etc), der hat eine Konvertierung nach void* (damit Konstrukte wie while(fin)... funktionieren - und offenbar hat dein Compiler entschieden, daß er void* nach char* konvertieren darf (ist afaik nur in C ohne Cast erlaubt).



  • optional heist bei ansi-c nicht, das man was weglassen kann

    long strtol(const cahr *s, char **endp, int base)

    hier: endp=NULL und base=10

    achja weglassen geht bei variabler parameterliste - beispiel printf()


Anmelden zum Antworten