[C/C++] Stringlänge prüfen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mr. Mouse, 6. Mai 2012 .

Schlagworte:
  1. 6. Mai 2012
    Zuletzt bearbeitet: 14. Mai 2012
    [SOLVED] Stringlänge prüfen

    Heyho,

    wir müssen z.Z. in C eine kleines Programm schreiben, welches die Ausgabe auf eine kleine LCD anzeige umleitet.

    Dazu haben wir die Methoden:

    putstring("Hallo Hallo"), um etwas zu printen

    und

    getstring(var1) um eine eingabe einzulesen und in var1 zu speichern.

    wir sollen jetzt ein programm schreiben, welches testet, ob die eingebenen Strings länger als 5 zeichen sind und ob sie nur zahlen enthalten.

    Mein Ansatz:

    Code:
    int main() {
     char zahl1[6];
     char zahl2[6];
     int i;
     
     putstring("Erste Zahl eingeben: ");
     getstring(zahl1);
     
     while(zahl1[0] == 0 || zahl[5] > 0) {
     putstring("Fehlerhafte Eingabe!");
     putstring("Erste Zahl eingeben: ");
     getstring(zahl1);
     } 
    }
    Aber er nimmt nur Zahlen an, welche GENAU 5 Zeichen lang sind.
    Die Überprüfung, ob es nur Zahlen sind krieg ich hin, die lass ich hier raus.

    Ich verstehe nicht wieso der Code nicht geht. Wir dürfen auch nur die beiden oben genannten Funktionen nutzen.

    Mein Gedanke:

    ASCII Wert für leeres Element = 0 (NULL)
    Folgen weitere leere dann ist der Wert = -1

    Oder hab ich da was falsch verstanden?
     
  2. 6. Mai 2012
    Zuletzt bearbeitet: 6. Mai 2012
    AW: Stringlänge prüfen

    bah wie ich solche aufgabenstellungen hasse...

    cctype (ctype.h) - C++ Reference
    cstring (string.h) - C++ Reference

    ---------------------

    ist das eine hausaufgabe?
     
  3. 6. Mai 2012
    AW: Stringlänge prüfen

    Das ist unsere Praktikumsaufgabe, ein Teil davon.. bin an ner FH.

    Hier nochmal mein Versuch schon mit Zahlencheck, aber er will net -.-

    Code:
    int main() {
     char zahl1[6];
     char zahl2[6];
     int i;
     
     putstring("Erste Zahl eingeben: ");
     getstring(zahl1);
     
     for(i=0; i<=4; i++) {
     while((zahl1[0] == 0) || (zahl1[i] < 48 && zahl1[i] > 57) || zahl1[5] > 0) {
     putstring("Fehlerhafte Eingabe!");
     putstring("Erste Zahl eingeben: ");
     getstring(zahl1);
     }
     }
     putstring("OK");
    }
     
  4. 6. Mai 2012
    AW: Stringlänge prüfen

    Du vergleichst Chars und Integer. Wenn du nicht mit ner ASCII Tablle arbeiten willst, muss du mit == '0' vergleichen, das macht das ganze auch übersichtlicher. Dass die Whileschleife nur bei genau 5 Zeichen terminiert ist klar. Die läuft so lange, biss das 6. Element deines Strings 0 (= '\0' bzw. NUL bzw. "Endekennung") ist. Dies ist logischwerise nur dann der Fall, wenn der String genau 5 Zeichen lang ist. Ich würde den String einfach iterieren und schauen, wo '\0' sitzt.
    //edit: Ohje viel zu lahm
     
  5. 6. Mai 2012
    AW: Stringlänge prüfen

    okay einen fehler habe ich beheben können.

    es muss heißen

    Code:
    (zahl1[i] < 48 [B]||[/B] zahl1[i] > 57)
    aber trotzdem halt nur ok, wenn GENAU 5 zahlen
     
  6. 6. Mai 2012
    AW: Stringlänge prüfen

    Ich habs zwar schon in #4 geschrieben und ausführlich erklärt aber doppelt hält bekanntlich besser:
    zahl1[5] > 0 gilt nur, wenn der String 5 Zeichen (6. Element = '\0') lang ist. Du musst den String Zeichenweise iterieren und prüfen.
     
    1 Person gefällt das.
  7. 6. Mai 2012
    AW: Stringlänge prüfen

    Ja schon klar, aber wenn der String z.B. nur 3 Zeichen hat, dann müsste zahl1[4] doch -1 sein oder nicht?
     
  8. 6. Mai 2012
    Zuletzt bearbeitet: 6. Mai 2012
    AW: Stringlänge prüfen

    hab dein problem mal eben mit meinem leihen c zusammengebaut:

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
     char zahl1[6] = { '\0' },
     zahl2[6] = { '\0' };
    
     fflush(stdin);
    
     for (;;) {
     puts("Erste Zahl eingeben: ");
     fgets(zahl1, sizeof(zahl1), stdin);
    
     unsigned fail = 0,
     npos = 0;
    
     for (unsigned i = 0; i < 5 && !fail; ++i) {
     switch (zahl1[i]) {
     case '0':
     if (npos == 0)
     fail = 1;
    
     break;
    
     case '1':
     case '2':
     case '3':
     case '4':
     case '5':
     case '6':
     case '7':
     case '8':
     case '9':
     npos = 1;
     break;
    
     default:
     fail = 1;
     }
     }
    
     if (!fail) break;
     puts("Fehlerhafte Eingabe!");
     }
    
     puts("Okay!");
     return 0;
    }
    puts/fgets sollte deinen funktionen entsprechen oder?
     
    1 Person gefällt das.
  9. 6. Mai 2012
    Zuletzt von einem Moderator bearbeitet: 13. Mai 2012
    dank di!

    werds nachher mal testen. gerade keine zeit..

    ------------------- hinzugefügter Beitrag --------------------

    Bin endlich mal dazu gekommen es zu testen.

    Das funktioniert aber trotzdem nicht, da auch zahlen, welche länger als 5 "zeichen" haben, akzeptiert werden..
     
  10. 13. Mai 2012
    AW: Stringlänge prüfen

    Guckst Du auch selber mal durch die Referenzen? Da gibts logisch aufgebaute Rubriken mit sich sprechenden Funktionen die extra für dein Vorhaben da sind. Bitte schaue dich dort mal nach strlen, isdigit, etc. rum.

    Solange is das Thema hier geschlossen, denn nach sovielen Tagen ohne Lösung bzw. einem Lösungsansatz ist es kaum vorstellbar, dass Du dich selber um das Problem gekümmert hast.
     
    1 Person gefällt das.
  11. 14. Mai 2012
    Zuletzt bearbeitet: 14. Mai 2012
    AW: Stringlänge prüfen

    Okay habs jetzt selber hinbekommen.

    Hier also die Funktion um einen String auf Zahlen & Länge <= 5 zu testen ohne schon vorhandenen Funktionen zu nutzen

    Code:
    int main() {
     char zahl1[10];
     
     unsigned int i, end1, fail = 1;
    
     do {
     putstring("Erste Zahl eingeben: ");
     getstring(zahl1);
    
     for(i=0; i<=6; i++) {
    
     if(zahl1[i] == 0) {
     end1 = i;
     break;
     }
     }
     if(end1 > 5) {
     putstring("Zahl zu lang.");
     fail = 1;
     } else if(end1 > 0 && end1 < 6) {
     for(i=0; i<end1; i++) {
     if(zahl1[i] < '0' || zahl1[i] > '9') {
     fail = 1;
     break;
     } else fail = 0;
     }
     } else {
     fail = 1;
     }
     } while(fail);
     puts("OK")
    }
    
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.