Double Wert in einzelne Ziffern aufteilen

#3788521
Lesenswert?

Hi,

ich schreibe eine Applikation in einer C-Verwandten programmiersprache.

Hier möchte ich meinen Double-Wert z.B. 18.34623 ein Einzelziffern 
aufteilen, so dass ich die einzelnen Ziffern durch aufruf eines 
Soundfiles als Ton ausgeben lassen kann.
Meine Tondateien habe ich entsprechend bezeichnet
"eins.wav", zwei.wav", "punkt.wav" usw.

Nur wie teile ich meinen Double Wert geschickt in die ein?

Ich dachte erst an DoubleToStr(x) und diesen String dann Ziffer für 
Ziffer durchzugehen.
Allerdings liefert meine Funktion StrToInteger() liefert auch beim 
Aufruf StrToInteger(".") den Wert 0 zurück, so dass ich nicht 
unterscheiden kann, ob es wirklich eine 0 ist, oder nur der Punkt :-(

Übersehe ich hier gerade eine leichte Lösung?
#3788536
Lesenswert?

H. C. schrieb:

> Ich dachte erst an DoubleToStr(x) und diesen String dann Ziffer für
> Ziffer durchzugehen.
> Allerdings liefert meine Funktion StrToInteger() liefert auch beim
> Aufruf StrToInteger(".")

Was jetzt?
DoubleToStr oder StrToInteger?

> den Wert 0 zurück, so dass ich nicht
> unterscheiden kann, ob es wirklich eine 0 ist, oder nur der Punkt :-(

Und?
einen String kann man zum Beispiel auch vorab abtesten, ob er nur aus 
einem Punkt besteht. Und eine Funktion StrToInteger ist auch nicht von 
Gott gegeben und in Stein gemeisselt.
Gast #3789750
Lesenswert?

Karl Heinz schrieb:
> Fragt sich nur fuer welche Fragestellung du eine Loesungsmoeglichkeit
> aufzeigst. Fuer die Frage des TO jedenfalls nicht

Hmm. Ein wenig Mitdenken erwarte ich schon. Klar: wenn eine 
ausformulierte Plug-andPlay-Lösung erwartet wird, dann ist mein 
Vorschlag unzureichend. Aber muß man alles bis ins Letzte vorkauen?
Gast #3789791
Lesenswert?

double Zahl;
char   Puffer [ 20 ];
sprintf ( Puffer, "%f", Zahl );

for ( int Zaehler = 0; Puffer [ Zaehler ] != '\0'; ++Zaehler ) {
  switch ( Puffer [ Zaehler ] ) {
    '0': Null_Wav_Raus ();
         break;
    '1': Null_Wav_Raus ();
         break;
         ...;
         break;
    '9': Neun_Wav_Raus ();
         break;
    '.': Punkt_Wav_Raus (); // oder Komma
         break;
    default: Mist_Im_String_Wav_Raus();
  }
}
... oder so
#3791088
Lesenswert?

radiostar schrieb:
> Karl Heinz schrieb:
>> Fragt sich nur fuer welche Fragestellung du eine Loesungsmoeglichkeit
>> aufzeigst. Fuer die Frage des TO jedenfalls nicht
>
> Hmm. Ein wenig Mitdenken erwarte ich schon. Klar: wenn eine
> ausformulierte Plug-andPlay-Lösung erwartet wird, dann ist mein
> Vorschlag unzureichend. Aber muß man alles bis ins Letzte vorkauen?

LIes dir noch mal das Anfangsposting durch und stell dir dabei eine 
Frage.
Wobei hat er Probleme?
Beim erzeugen des Strings oder beim Auswerten der Character im String?
#3791142
Lesenswert?

Hi,
danke für eure Hilfe und danke für den Tipp mit dem "zuvor" den String 
nach . oder , durchsuchen. Dieser Schritt hat mir im Kopf zu einer 
Lösung gefehlt :-)

Ich möchte nun gerne die Zahlen nicht der Reihe nach ausgeben, sondern 
so wie sie wirklich heißen. Dazu habe ich mir folgendes überlegt:

Ich benötige folgende Zahlen/Wörter als wav-Datei:
1-12
"zehn"
"zwanzig"
"dreißig"
"zig"
"hundert"
"tausend"
"und"
"komma"

Anschließend würde ich folgende Einteilungen vornehmen
zahl <= 12   --- direkte Ausgabe
12 < zahl <= 39   -- Einer-Stelle + "zehn" // "zwanzig" // "dreißig"
39 < zahl <= 99   -- Einer-Stelle + Zehnerzahl + "zig"
99 < zahl <= 999  -- Hunderterzahl + "hundert" + Einer-Stelle + 
Zehnerzahl + "zig"
usw.

Gibt es sowas bereits fertig in C programmiert?
Gast #3791166
Lesenswert?

Wenn Du eine Bibliothek brauchst um Zahlen, die Du ja in rechnerlesbarer 
Form vorliegen hast - also vor der Konvertierung in das dezimale System 
- brauchst, so solltest Du Dir Dein Lehrgeld (Leergeld) zurückgeben 
lassen.

Du hast die Zerlegung ja schon fast fertig.

Übrigens: Der Text "vier" + "zig" klingt holpriger als "vierzig".
#3792434
Lesenswert?

OK, danke für den Tipp!

Nun habe ich noch ein Problem mit meiner Applikation.
Diese arbeitete synchron und ich müsste nach dem Abspielen des 
jeweiligen Files angeben, wie lange danach "geschlafen" werden soll.

Gibt es irgendwie die Möglichkeit, die einzelnen wav-Datei temporär 
aneinanderzuheften, so dass meine Applikation nur noch eine einzelne 
wav-Datei aufrufen muss?!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren