String in int-Array umwandeln



  • Hallo !

    Wie ihr sicher schon dem Titel entnommen habt, habe ich das Problem, dass ich gerne ein String in ein int-Array umwandeln möchte. Ich habe schon versucht, innerhalb einer for Schleife die einzelen Elemente des Strings an die jeweilige Stelle des Arrays zu tun:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main(){
    
    	std::ifstream file;
    	std::string inhalt;
    	file.open("C:\\Users\\Jonathan\\Desktop\\test\\test.txt");
    	if (file.is_open()){
    		while (std::getline(file, inhalt)){
    			std::cout << inhalt << std::endl;
    		}
    		file.close();
    	}
    	else{
    		std::cerr << "Fehler beim Öffnen der Datei!" << std::endl;
    	}
    	int *pAnzahl = new int[sizeof(inhalt)];
    	for (int i = 0; i < sizeof(inhalt); i++)
    	{
    		pAnzahl[i] = inhalt[i];
    			std::cout << pAnzahl[i] << std::endl;
    	}
    
    	system("Pause");
    
    	return 0;
    }
    

    Dies hat aber einen Fehler ausgelöst und der Compiler hat mir an die jeweilige Stelle im Programm einen Haltepunkt gesetzt.

    Hätte jemand vielleicht eine Idee, wie man das umsetzen könnte? 🙂
    Für jede Hilfe bzw. Ratschlag wäre ich sehr dankbar!! 👍



  • Was glaubst du ist der Inhalt von "inhalt"?
    Was glaubst du liefert dir sizeof(inhalt)?

    Was willst du eigentlich wirklich machen?



  • Also meiner Meinung nach ist der Inhalt von "inhalt" der Inhalt der Datei test.
    Als erstes dachte ich, dass sizeof(inhalt) die ANzahl der Elemente, die im String inhalt gespeichert sind, liefert. Dann habe ich aber testweise sizeof(inhalt) ausgeben lassen; das war aber 28. Das kann, in meinem Fall aber nicht sein, denn meine Datei hat 18 Zahlen gespeichert.



  • J_1711 schrieb:

    Also meiner Meinung nach ist der Inhalt von "inhalt" der Inhalt der Datei test.

    Dann schau die den Inhalt doch mal an (Debugger oder Ausgabe auf Konsole)

    J_1711 schrieb:

    Als erstes dachte ich, dass sizeof(inhalt) die ANzahl der Elemente, die im String inhalt gespeichert sind, liefert. Dann habe ich aber testweise sizeof(inhalt) ausgeben lassen; das war aber 28. Das kann, in meinem Fall aber nicht sein, denn meine Datei hat 18 Zahlen gespeichert.

    Die Anzahl der Elemente liefert std::string mit length und size. sizeof liefert die Größe der Datenstruktur. Die ist unabhängig vom Inhalt immer gleich.
    Was ist denn ein einzelnes Element eines std::string?

    manni66 schrieb:

    Was willst du eigentlich wirklich machen?


  • Mod

    Prüfe doch auch noch deine erste Annahme.

    Weiterhin guck dir mal an, was string so alles kann. sizeof ist etwas, das eher für low-levelige C-Datenstrukturen gedacht ist, für C++-Klassen funktioniert das nicht. Bzw. es funktioniert hervorragend, aber nicht so wie du denkst: Es gibt dir die Größe der unterliegenden low-level Datenstruktur zurück, nicht die logische Länge.

    new/delete vergisst du aus ähnlichen Gründen am besten auch sofort wieder. In C++ gibt es high-level Datenstrukturen, die exakt das gleiche (und gleich schnell!) machen, aber dafür viel angenehmer und fehlerfrei zu benutzen sind.

    Die Idee, Daten in Strings einzulesen, um sie dann in Zahlen umzuwandeln, ist meistens schlecht. Denn die Umwandlung in Zahlen erfolgt dann über die Standard-Lesefunktionen. Das heißt, es wäre besser gewesen, gleich die Standard-Lesefunktionen zu benutzen und sich den Umweg zu sparen.


Anmelden zum Antworten