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?
H. C. schrieb: > Übersehe ich hier gerade eine leichte Lösung? char c = string[i]; if (c == '0') then.. else if (c == '1') then.. else...
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.
:
Bearbeitet durch User
radiostar schrieb: > H. C. schrieb: >> Übersehe ich hier gerade eine leichte Lösung? > > char c = string[i]; > > if (c == '0') then.. > else if (c == '1') then.. > else... Da ist switch/case aber eleganter:
1 | switch (c) |
2 | {
|
3 | case 0: soundfile = "null.wav"; break; |
4 | case 1: soundfile = "eins.wav"; break; |
5 | ....
|
6 | };
|
Rolf Magnus schrieb: > Da ist switch/case aber eleganter: Oh, Mann. Ich wollte keinen Schönheitswettbewerb gewinnen, sondern eine Lösungsmöglichkeit aufzeigen.
Fragt sich nur fuer welche Fragestellung du eine Loesungsmoeglichkeit aufzeigst. Fuer die Frage des TO jedenfalls nicht
Karl Heinz schrieb: > Fragt sich nur fuer welche Fragestellung du eine > Loesungsmoeglichkeit > aufzeigst. Fuer die Frage des TO jedenfalls nicht Die Lösung ist richtig. Die Frage ist falsch.
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?
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
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?
:
Bearbeitet durch User
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?
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".
H. C. schrieb: > Ich benötige folgende Zahlen/Wörter als wav-Datei: vergiss nicht die 17 ;) Sieben-Zehn hört sich komischer an als Sieb-Zehn
chris schrieb: > H. C. schrieb: >> Ich benötige folgende Zahlen/Wörter als wav-Datei: > > vergiss nicht die 17 ;) > Sieben-Zehn hört sich komischer an als Sieb-Zehn Das gilt natürlich auch für 70. Und sechs-zehn klingt auch eigenartig, oder gar eins-hundert-sieben-und-zehn-zig.
:
Bearbeitet durch User
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?!
H. C. schrieb: > ich müsste nach dem Abspielen des jeweiligen Files angeben, wie lange > danach "geschlafen" werden soll. Machs anders: lass Dir vom Abspieler ein Signal schicken, wenn er fertig ist, und warte ("schlafe") bis zum Eintreffen dieses Signals.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.