Von einem String bestimmte Zeichen entfernen.

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      Von einem String bestimmte Zeichen entfernen.

      Hi,
      also ich brauche Hilfe bei einer Aufgabe. Programmiert wird in C.
      Wenn ein Zeichen in einem String das aus einem Array von Char's besteht kein 0-9, minus, plus oder punkt enthält, dann soll die Variable "Fehler" um eins erhöht werden. Dadurch wird dann in der Main funktion ein Fehler ausgegeben in der Konsole.

      EDIT1: Habe die Main Funktion hinzugefügt. Das Problem ist, dass wenn man z.B. "asdf" eingibt, dann 0.000000 aus gegeben wird.
      In der Zeile 8 soll eigentlich statt PS folgendes stehen (alles zusammen):
      % 5 0 s

      EDIT2: Es geht darum dass man nur eine gültige Gleitkommazahl angeben darf. Wenn das der Fall ist, dann wird es in der Konsole angezeigt.

      Mein bisheriger Code:

      Quellcode

      1. int isDouble(char* s);
      2. int main()
      3. {
      4. char Zeichenfolge[50];
      5. do
      6. {
      7. printf("\n\nBitte geben sie eine Gleitkommazahl ein ");
      8. scanf_s("Ps", Zeichenfolge,50);
      9. isDouble(Zeichenfolge);
      10. if (isDouble(Zeichenfolge))
      11. {
      12. printf("\n %lf wurde eingegeben",atof(Zeichenfolge));
      13. }
      14. else
      15. {printf("\nFehler bei der Eingabe");}
      16. }
      17. while (1);
      18. }
      Alles anzeigen


      Quellcode

      1. int isDouble(char* s)
      2. {
      3. int i,Punkte,Fehler;
      4. Punkte=0;
      5. Fehler = 0;
      6. for(i = 0; (i<=50 && s[i]!='\0'); i++)
      7. {
      8. if(s[i+1] == '+' || s[i+1] == '-')
      9. {Fehler= Fehler+1;}
      10. if (s[i] == '.')
      11. {Punkte= Punkte+1;}
      12. if (Punkte>1)
      13. {Fehler = Fehler+1;}
      14. if((s[i] < '0') && (s[i] > '9'))
      15. {
      16. if (((s[i] !='+') || (s[i] !='-') || (s[i] !='.')))
      17. { Fehler = Fehler+1;}
      18. }
      19. }
      20. if (Fehler>=1)
      21. {return(0);}
      22. else
      23. {return(1);}
      24. }
      Alles anzeigen
      <burny209>: seeenseee sieht jemand was ich schreibe?
      <seeenseee>: burny209 ich kanns immernoch nich sehen
      <burny209>: seeenseee guck CHEATER61 sieht was ich schreibe
      <seeenseee>:
      ich aber nich

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von CHEATER61 ()

      Habs bereits fertig mit folgendem Code:
      EDIT: Die Formatierung klappt hier nicht so gut.

      C-Quellcode

      1. #include "stdafx.h"
      2. #include "stdio.h"
      3. #include "stdlib.h"
      4. #include "conio.h"
      5. int isDouble(char* s);
      6. int main()
      7. {
      8. char Zeichenfolge[50];
      9. do
      10. {
      11. printf("\n\nBitte geben sie eine Gleitkommazahl ein ");
      12. scanf_s("%50s", Zeichenfolge,50);
      13. isDouble(Zeichenfolge);
      14. if (isDouble(Zeichenfolge))
      15. {
      16. printf("\n %lf wurde eingegeben",atof(Zeichenfolge));
      17. }
      18. else
      19. {printf("\nFehler bei der Eingabe");}
      20. }
      21. while (1);
      22. }
      23. int isDouble(char* s)
      24. {
      25. int i,Punkte,Fehler;
      26. Punkte=0;
      27. Fehler = 0;
      28. for(i = 0; (i<=50 && s[i]!='\0'); i++)
      29. {
      30. if(s[i+1] == '+' || s[i+1] == '-')
      31. {Fehler= Fehler+1;}
      32. if (s[i] == '.')
      33. {Punkte= Punkte+1;}
      34. if (Punkte>1)
      35. {Fehler = Fehler+1;}
      36. if((s[i] < '0') || (s[i] > '9'))
      37. {
      38. if (s[i] !='+')
      39. {
      40. if (s[i] !='-')
      41. {
      42. if(s[i] !='.')
      43. {
      44. Fehler = Fehler+1;
      45. }
      46. }
      47. }
      48. }
      49. }
      50. if (Fehler>=1)
      51. {return(0);}
      52. else
      53. {return(1);}
      54. }
      Alles anzeigen
      <burny209>: seeenseee sieht jemand was ich schreibe?
      <seeenseee>: burny209 ich kanns immernoch nich sehen
      <burny209>: seeenseee guck CHEATER61 sieht was ich schreibe
      <seeenseee>:
      ich aber nich
      Mein Ansatz:

      C-Quellcode

      1. int isDouble(char* s) {
      2. int i, Punkte, Fehler;
      3. Punkte = 0;
      4. Fehler = 0;
      5. for (i = 0; (i <= 50 && s[i] != '\0'); i++) {
      6. /* Ich habe mir erlaubt die Lesbarkeit zu erhöhen indem ich das
      7. * Zeichen kopiert habe :)
      8. */
      9. char zeichen = s[i];
      10. if (
      11. ((zeichen < '0') && (zeichen > '9'))
      12. || (zeichen == '-')
      13. || (zeichen == '+')
      14. ) {
      15. /* Zeichen ist eine Zahl, Plus oder Kommata */
      16. /* Zeichen gültig ! - Nichts tun*/
      17. } else if (zeichen == '.') {
      18. /* Zeichen ist ein Punkt */
      19. Punkte++;
      20. /* Anzahl der Punkte prüfen
      21. * (Die Anzahl der Punkte sollte nur geprüft werden, wenn ein Punkt
      22. * gefunden wurde. In jedem anderen Fall hat sie sich ja sowieso
      23. * nicht geändert)
      24. */
      25. if (Punkte > 1) {
      26. /* Zu viele Punkte - Fehler*/
      27. Fehler++;
      28. }
      29. } else {
      30. /* Zeichen ungültig */
      31. Fehler++
      32. }
      33. } /* End for */
      34. if (Fehler >= 1) {
      35. return (0);
      36. } else {
      37. return (1);
      38. }
      39. }
      Alles anzeigen


      Die Methode Fehler zu zählen ist sinnfrei. Man kann auch direkt mit einem Fehler abbrechen. Spart Zeit und Rechenleistung ..


      Dein Code hat ein Problem:

      C-Quellcode

      1. if((s[i] < '0') || (s[i] > '9'))

      Alle Zeichen die größer 0 sind oder kleiner 9 ... das trifft auf das gesammte ASCII Charset zu ...

      Gruß
      florian0
      Also funktionern tut mein Code.
      Hier mal die gesamte Aufgabenstellung damit man erkennt was gemeint ist:

      <burny209>: seeenseee sieht jemand was ich schreibe?
      <seeenseee>: burny209 ich kanns immernoch nich sehen
      <burny209>: seeenseee guck CHEATER61 sieht was ich schreibe
      <seeenseee>:
      ich aber nich
      Das ist die Abfrage ob nach dem ersten zeichen ein + oder - kommt wenn ja ist das ja logischerweise ein Fehler.
      Das verhindet also eingaben wie:
      4+
      ++
      +545+
      <burny209>: seeenseee sieht jemand was ich schreibe?
      <seeenseee>: burny209 ich kanns immernoch nich sehen
      <burny209>: seeenseee guck CHEATER61 sieht was ich schreibe
      <seeenseee>:
      ich aber nich