Cpp Textdatei: Zahlen auslesen

Hi zusammen,

ich sitze gerade vor einem Problem in C++. Ich habe eine Textdatei, in der alle möglichen Zahlen stehen, getrennt durch jeweils ein Whitespace und/oder Newline. Die Zahlen sind zweistellig (wäre toll, wenn das ganze auch für dreistellige Zahlen möglich ist).

Bisher habe ich das so gemacht. Das funktioniert solange es sich um positive, einstellige Zahlen handelt.

Code:
        char sign;
        std::ifstream file_in;

       // file_in.open(filename, std::ios_base::in);

	// Fill array:
	while (!file_in.eof()) {
		file_in.get(sign);
		if (sign == ' ' || sign == '\n')
			continue;
		else {
			/* Fill array with value of sign. sign-'0' converts
			 * char to int for the process. */
			triangle[x][y] = sign - '0';
			++x;
			
		}
		if (x > y) {
			x = 0;
			++y;
		}	
	}
	file_in.close();

Wie zu sehen ist befülle ich ein Array mit den Zahlen, wobei ich jedes Zeichen (solange es weder Whitespace noch Newline ist) in eine Zahl umwandele.

Das ist eine verdammt unelegante Methode. Hat eine Zahl mehr als eine Stelle funktioniert es nicht mehr. Weiß jemand, wie ich schöne Integerwerte für die Zahlen erhalten kann?

Der Dateiinhalt kann zum Beispiel sein:
Code:
04 23 73 22 01 76 98 56
95 31 65 09 21 37

Toll wäre eine Methode, bei der eine beliebige Anzahl an Stellen ausgewertet werden kann pro Zahl. Außerdem habe ich das Problem, dass manche Zahlen, z.B. "04" zwei Stellen haben. Diese Zahl müsste für einen gültigen Int-Wert in eine 4 konvertiert werden.

Weiß jemand Rat?

Beste Grüße
lama
 
Ich würde das Problem ganz anders angehen, und die Werte schon anders in die Datei schreiben. Statt

Code:
04 05 01 13

würde ich

Code:
4 5 1 13

nehmen, und mir über Stringpositionen merken, wo ein Whitespace ist, das nächste suchen und die Zeichen dazwischen kopieren. Damit wäre die Sache mit Integer ja gelaufen. Wenn die Datei zu groß zum bearbeiten ist (wegen dem Arbeitsaufwand), würde ich eine Konvertierungsroutine schreiben, die prüft, ob es sich bei mehrstelligen Zahlen an der ersten Stelle um eine 0 handelt, und wenn das zutrifft, einfach das erste Zeichen löschen und ggf. die gleiche Zahl nochmals überprüfen.

Hoffe dir damit geholfen zu haben, aber C++ Code dafür hab ich leider keinen ;)
 
Man könnte stattdessen auch einfach die Zahlen auslesen (einen String zusammensetzen, der von einem Whitespace bis zum nächsten geht) und zum Umwandeln atoi() oder eine C++ Verrenkung (google "C++ String to int" ) nutzen.
Code:
i  int i;
i = atoi ("123");
cout<<i;
bzw.
Code:
std::string strZahl = eingelesener Abschnitt;
std::stringstream myStream(strZahl);

int num;
myStream >> num;
 
Zurück
Oben