[C/C++] Übungsaufgabe (atof nachbauen)
Worum geht es? Es soll eine "atof"-ähnliche Funktion entstehen (eine Funktion zur Umwandlung eines C-Strings in einen (signed) double)
Was soll damit erreicht werden? Ein besseres Verständnis von C-Strings und deren Bearbeitung, ohne spezielle Hilfsmittel (zB. Funktionen aus der Standardbibliothek).
Ich gebe folgenden Code vor:
Code:
#include <stdio.h>
double _atof_(const char *);
int main(void)
{
printf("%lf\n", _atof_("3.141592"));
printf("%lf\n", _atof_("-3.14159"));
printf("%lf\n", _atof_("78"));
printf("%lf\n", _atof_("-78"));
printf("%lf\n", _atof_("3.14159_"));
printf("%lf\n", _atof_("3.141.59"));
printf("%lf\n", _atof_("-3."));
printf("%lf\n", _atof_("-"));
printf("%lf\n", _atof_("-b"));
printf("%lf\n", _atof_("ABCDEFG"));
return 0;
}
#include <stdio.h> steht dort lediglich für printf. Es sollen, wie bereits gesagt, keine Funktionen aus der Laufzeitbibliothek verwendet werden.
Alle zugelassenen Hilfsmittel sind somit auf Variablen, Schleifen, If-Abfragen, Mehrfachauswahlen (switch), usw. beschränkt.
Die Funktion soll dem oben ausgeführten Funktionsprototyp entsprechen;
Name: _atof_ (die Unterstriche sind lediglich dafür da, eine Namenskollision zu vermeiden)
Rückgabetyp: (signed) double
Parameter: Zeiger auf einen const char (const char *)
Das Programm soll folgenden Text ausgeben:
Code:
3.141592
-3.141590
78.000000
-78.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
Falls eine Zahl aufgrund ihrer Beschaffenheit nicht in einen double passt, muss kein [+|-] HUGE_VAL zurückgegeben werden (siehe: http://www.cplusplus.com/reference/c...dlib/atof.html )
Musterlösung: http://nopaste.free-hack.com/index.php?id=e5968ed60c
Viel Spaß + Erfolg.
mfG. BlackBerry
AW: [C/C++] Übungsaufgabe (atof nachbauen)
Hi
http://pastebin.com/sGmG23CB
Funktioniert! ^^
Lässt sich sicherlich schöner lösen, Musterlösung ist down :(
MfG Leange
P.S. <iostream> nur für cin.get()
AW: [C/C++] Übungsaufgabe (atof nachbauen)
Zitat:
Zitat von
leange
<iostream> nur für cin.get()
Und C++ nur für iostream? :P
Mainz: https://gist.github.com/starflow/b63...12585ee5378952
Da bb sich die Freiheit genommen hat falsche Ergebnisse vorzugeben, hab ich mir die Freiheit genommen es richtig zu machen und den Output anzupassen :D
Output:
Code:
» make _atof_ && ./_atof_
cc _atof_.c -o _atof_
| Input | Output atof | Output atof_ | Output _atof_
| ABCDEFG | 0.000000 | 0.000000 | 0.000000
| -b | 0.000000 | 0.000000 | 0.000000
| - | 0.000000 | 0.000000 | 0.000000
| -3. | -3.000000 | -3.000000 | 0.000000
| 3.141.59 | 3.141000 | 3.141000 | 0.000000
| 3.14159_ | 3.141590 | 3.141590 | 0.000000
| -78 | -78.000000 | -78.000000 | -78.000000
| 78 | 78.000000 | 78.000000 | 78.000000
| -3.14159 | -3.141590 | -3.141590 | -3.141590
| 3.141592 | 3.141592 | 3.141592 | 3.141592
P.S.:
Ist natürlich nich 100% atof, es fehlt noch:
* die Verarbeitung vom Exponent, wenn vorhanden.
* Lokalisierung (Komma als Dezimaltrennzeichen)
* Verarbeitung von Hexadezimal, Infinity und NAN
* Irgendwas mit Buffđ→ĸøłŋ€®
AW: [C/C++] Übungsaufgabe (atof nachbauen)
Zitat:
Und C++ nur für iostream? :P
C++ nur fürs Visual Studio. Heißt ja Visual C++ und nicht Visual C! ;)
Aber ehrlich ... ich hab gerade so(!) verstanden was Zeiger sind. Wann, warum und wie man sie benutzt. Und du kommst mit sowas:
Also les ich mir das hier durch. Und jetzt hab ich Kopfschmerzen vielen dank auch. xD
MfG Leange
AW: [C/C++] Übungsaufgabe (atof nachbauen)
Zitat:
Zitat von
leange
Aber ehrlich ... ich hab gerade so(!) verstanden was Zeiger sind.
Das hat bei mir auch erst vor kurzem Click gemacht. Dabei sind die Dinger Todessimpel.
Zitat:
Zitat von
leange
Wann, warum und wie man sie benutzt. Und du kommst mit sowas:
Ein Array gefüllt mit char-Arrays, aka C Strings ^^\0
Da Arrays auch nichts weiter als Pointer sind, also ein Zeiger auf den Anfang einer Liste voller Zeiger.
Zitat:
Zitat von
leange
Also les ich mir
das hier durch. Und jetzt hab ich Kopfschmerzen vielen dank auch. xD
Ich weiß ja nicht ob du Beej's Guide to C kennst, aber mir hat der sehr geholfen, besonders beim Verständnis im Umgang mit Pointern :)
Zitat:
So anyway, if we can get on with it and get a drum roll and some forboding music playing for the definition of a pointer, a pointer is the address of some data in memory. Imagine the classical score from 2001: A Space Odessey at this point. Ba bum ba bum ba bum BAAAAH!