tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
307
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    bigjuju4fr bigjuju4fr ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    5
    Guten Abend,

    ich bin ganz neu mit der C Sprache und versuche grade eine Aufgabe mit string zu lösen aber ich komme nicht klar.
    hier ist die aufgabestellung:

    es soll eine Funktion entwickelt werden, die einen String untersucht, ob dieser eine korrekte negative Integer-Zahl darstellt oder nicht .( keine Exponentialeingabe)
    Im String sind keine Leerzeichen.
    Der String ist beliebiger lang
    und return 0; --> String stellt eine negative Zahl dar.
    return 1; --> string stellt keine negative zahl dar.


    ich weiss, dass es im Programm überprüft werden sollte, dass im String immer ein in der ersten Stelle ein minus (-) zeichen drin ist, dann ob eine zahl immer im String enthalten ist.
    und es sollte keine leerzeichen im String drin stehen.

    Aber ich weiss nicht wie ich das ganze auf der Reihe jetzt kriege und brauche eure Hilfe.
    Danke.
     

  2. #2
    bigjuju4fr bigjuju4fr ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    5
    Also ich habe mir was überlegt und bin auf diese Lösung gekommen..

    #include <stdio.h>
    #include <cctype.h>

    void main ()
    {

    int check_input(char *s)

    /* Funktion prüft, ob eingegebener String ngative Zahl ist */
    {

    unsigned i;

    if (s[0] != '-') /* Minus-Zeichen (-) überprüfen */
    {
    return 1;
    }

    for(i=1; i<strlen(s); i++) /* Überprüfe Ziffern bzw Zahl */
    {
    if(s[i] > '0' || s[i] < '9')
    return 1;
    }
    return 0;
    }
    }


    ich werde's noch testen, ob alles stimmt. Aber könntet ihr gerne andere Lösungen vorschlagen.
    Danke
     

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi und nachträglich Willkommen bei tutorials.de

    Ein Tipp zu den Forumsfunktionen:
    Schreib C/C++-Code das nächste Mal biite zwischen
    [cpp]...[/cpp].
    Machts um einiges besser lesbarer.

    Zu der Funktion:
    Prinzipiell ganz in Ordnung, aber ein Denkfehler (oder nur Tippfehler?):
    Beim if mit der '0' und '9' gehören < und > vertauscht
    Es ist dann keine Ziffer,wenn es kleiner als 0 oder größer als 9 ist (mit den ASCII-Werten betrachtet).

    Noch zwei Punkte:
    Warum steht check_input im main? Das sollte da raus.
    Und die includes stdio und cctype brauchst du für diesen Code beide nicht. Verlangsamt nur das Kompilieren.

    Gruß
    bigjuju4fr bedankt sich. 

  4. #4
    bigjuju4fr bigjuju4fr ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    5
    hallo und danke für deinen Vorschlag.
    ich habe den Tippfehler beim if schleife bemerkt, nachdem ich gepostet habe.
    Allerding ich teste grade aber bekomme immer einen Fehler, dass die Variable s ein nicht deklarierter Bezeichner ist.

    und für den letzten punkt haste Recht, braucht man keine stdio.h und cctype.h sondern string.h
    kannst du mir helfen, den Fehler zu beheben?
    Danke.

    Gruß
     

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    In welcher Zeile wird der Fehler angezeigt?
    Hast du die Funktion auch aus dem main rausgenommen?

    if ist übrigens keine Schleife. Schleifen wiederholen sich (while, for, do-while).
     

  6. #6
    bigjuju4fr bigjuju4fr ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    5
    ja hab die Funktion aus dem main rausgenommen und der Fehler beginnt nach der if Anweisung (s[0] ...
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Also, wenn du das gemacht hast, sollte es eigentlich keine Probleme geben.
    Kannst du nocheinmal den Code zeigen, wie er jetzt aussieht?
     

  8. #8
    bigjuju4fr bigjuju4fr ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    5
    Ok.
    So sieht der Code:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
     
    #include <string.h>
     
    int check_zahl(char* s);
     
    void main()
     
    /* Funktion prüft, ob eingegebener String ngative Zahl ist */
    {
     
      unsigned i;
     
      if (s[0] != '-')  /* Minus-Zeichen (-) überprüfen */
      {
        return 1;
      }
     
    for(i=1; i<strlen(s); i++)  /* Überprüfe Ziffern bzw Zahl */
    {
    if(s[i] > '0' || s[i] < '9')
    return 1;
    }
    return 0;
    }
     

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Scheinbar hast du das Prinzip von Funktionen nicht ganz verstanden.
    Die gibts, um Codeteile aus dem main auszulagern, und dann aus dem main
    nur über den Funktionsnamen den ganzen Code auszuführen.

    Macht bei sinnvoller Verwendung
    1) alles übersichtlicher,
    2) spart einem das Immer-wieder-neuschreiben bei mehrmaliger Verwendung
    usw...

    Hier was zum Lesen:
    http://openbook.galileocomputing.de/c_von_a_bis_z/

    Zum Code:
    So funktionerts:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    #include <string.h>
     
    int check_zahl(char* s)
    {
        unsigned i;
        if (s[0] != '-')
            return 1;
     
        for(i=1; i<strlen(s); i++)
        {
            if(s[i] > '0' || s[i] < '9')
                return 1;
        }
    }
     
    int main()
    {
        return 0;
    }

    Wenn "in" einem if nur eine einzige Anweisung steht, kann man die {} auch weglassen.
    Siehst du bei der Minus-Überprüfung.

    Und main muss laut Standard int als Returntyp haben. Nicht void.
    Vor allem, wenn man beim return Zahlen zurückgibt (int).
    void würde für "nichts" stehen.

    Gruß
    bigjuju4fr bedankt sich. 

  10. #10
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Ich hätte atoi() verwendet
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  11. #11
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von saftmeister Beitrag anzeigen
    Ich hätte atoi() verwendet
    Hm. Allerdings ignoriert atoi Leerzeichen am Anfang und beliebige Zeichen nach x-beliebigen Ziffern...

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. String auf Zahlen überprüfen. Wie geht das?
    Von Davicito im Forum C/C++
    Antworten: 57
    Letzter Beitrag: 11.06.11, 06:23
  2. String auf Zahlen Überprüfen
    Von Happymaker im Forum Java
    Antworten: 12
    Letzter Beitrag: 27.02.09, 18:49
  3. String auf Zahlen überprüfen
    Von Germu im Forum Java
    Antworten: 5
    Letzter Beitrag: 10.09.08, 08:47
  4. Antworten: 0
    Letzter Beitrag: 10.04.08, 14:08
  5. String auf Zahlen überprüfen
    Von Folcan im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 12.09.07, 23:45

Stichworte