string (char array) in float wandeln



  • Guten Morgen,

    ich habe mal wieder eine Frage ...

    also, ich lese ein char-Array (string) über die Tastatur ein. Nun möchte ich
    den 'string' nach Zahlen 0<=x<=9 durchsuchen lassen, und dann alle Zahlen
    in einen float-Array kopieren.

    Ich versuche mich schon eine Weile an atof, aber ich bekomme immer
    wilde Fehlermeldungen, wenn ich versuche, mit folgendem Code das Array zu wandeln .

    char *eingabe;
    ...
    for(i=0; i<strlen(eingabe), i++) zahl=atof(eingabe[i]);
    

    Ist sicher ein Error der Syntax ... aber ich bräuchte da mal Hilfe !

    Danke im voraus !



  • atof kannst du so einsetzen:

    char s[]="123.456";
      float f=atof(s);
    

    Dein Beispiel dürfte wohl nicht kompilieren, da du kein char* (String, Zeichenkette), sondern ein char (Zeichen) übergeben willst. Um das Ganze syntaktisch richtig zu gestalten, müsstest du also eingabe an atof übergeben. Dann ist die Schleife aber überflüssig, da mit atof eine Zahl aus dem String geholt wird, und dieselbe Zahl auch im nächsten Schleifendurchlauf.

    Übrigens verstehe ich nicht ganz, wieso du floats aus dem String extrahieren willst, wenn du Stelle für Stelle liest. Ein einstelliger Wert kann ja zumindest keine Nachkommastellen enthalten, richtig? Und wenn zahl ein float-Array ist, dann musst du auch den []-Operator einsetzen, um das jeweilige Element anzusprechen.

    Zeig doch mal einen Beispielstring und erklär etwas genauer, was du willst. Eventuell findet man da eine bessere Lösung (bzw. überhaupt eine 😉 ).



  • Übrigens verstehe ich nicht ganz, wieso du floats aus dem String extrahieren willst, wenn du Stelle für Stelle liest. Ein einstelliger Wert kann ja zumindest keine Nachkommastellen enthalten, richtig?

    Weil ich dann mit den Zahlen weiter rechnen möchte. Und da sich auch eine
    Division ergeben kann, habe ich float gewählt.

    Zeig doch mal einen Beispielstring und erklär etwas genauer, was du willst. Eventuell findet man da eine bessere Lösung (bzw. überhaupt eine ).

    Ich sitze immer noch über meinem Problem, einen einfachen Taschenrecher
    abzubilden. Also eine Eingabe eines Strings in der Form "1+2*3-4/5" und
    mein Programm soll es gemäß gültiger Rechenvorschriften ausrechnen.

    Hatte dazu schon mal einen Thread aufgemacht, aber die angebotenen Lösungen
    waren zu kompliziert für mich. Will das ja nicht einfach nur abtippen,
    bzw. kopieren. Sondern ich möchte ja verstehen, was ich da progge.



  • Den String zerlegen könntest du z.B. mit strtok. Du legst dann als Seperator-String sowas wie "+-*/" fest, so dass du die einzelnen Operanden bekommst, diese aber auch mehrstellig sein können (in deinem Code liest du ja immer nur einen einzelnen char). Wenn du es möglichst simpel haben willst, dann lass Punkt vor Strich erst mal weg, dann ist es eigentlich relativ einfach. Du liest immer 2 Operanden und den Operator dazwischen ein und errechnest das Zwischenergebnis, das ist dann logischerweise der erste Operand für die Folgeoperation. Das machst du einfach solange, bis du ans Ende des Terms gewandert bist.



  • _matze schrieb:

    Den String zerlegen könntest du z.B. mit strtok. Du legst dann als Seperator-String sowas wie "+-*/" fest, so dass du die einzelnen Operanden bekommst, diese aber auch mehrstellig sein können (in deinem Code liest du ja immer nur einen einzelnen char). Wenn du es möglichst simpel haben willst, dann lass Punkt vor Strich erst mal weg, dann ist es eigentlich relativ einfach. Du liest immer 2 Operanden und den Operator dazwischen ein und errechnest das Zwischenergebnis, das ist dann logischerweise der erste Operand für die Folgeoperation. Das machst du einfach solange, bis du ans Ende des Terms gewandert bist.

    Punkt vor Strich ist eigentlich relativ einfach...
    Du könntest deine Eingabe in einer Schleife solange bearbeiten bis keine Punkt Operanden mehr vorhanden sind.

    also:

    1+3*4-8+30/2
    1+12-8+15
    20
    

    Wenn nur *, /, + und - vorkommen ist das relativ einfach. Mit Klammern wird das schwerer.



  • Also das mit der for() - Schleife ist mir schon klar, nur weiß ich
    nicht, wie ich es anstellen soll, wenn in der Eingabe z.B.
    steht 300/3 ,also eine mehrstellige Zahl steht.



  • -=The Brain=- schrieb:

    Also das mit der for() - Schleife ist mir schon klar, nur weiß ich
    nicht, wie ich es anstellen soll, wenn in der Eingabe z.B.
    steht 300/3 ,also eine mehrstellige Zahl steht.

    Naja...was trennt denn deine Zahlen voneinander?
    Entweder Operatoren oder Operatoren&Leerzeichen.
    Da bastelst du entweder die einzelnen chars zu einem großen zusammen um von
    5/1234+8 auf 1,2,3,4-> 1234 zu kommen oder du zerhackst die Zeichenkette sowieso.
    Einfach mit ner Schleife die Zeile durchlaufen lassen..wenn du einen Operator findest nimmst du die Zahl danach als erste Ziffer, wenn dan kein Operator kommt ist es eine Zahl und die fügst du zu der vorigen hinzu, ist es aber ein Operator speicherst du die Zahl ab



  • Vielen Dank, das klingt plausibel. Das versuche ich gleich mal ! Thx !!!


Anmelden zum Antworten