[Strings] Zahlgruppen zählen



  • Hi leute!

    Aufgabenstellung:
    Schreiben Sie zwei Unterprogramme:
       a) Ein Unterprogramm um die Strichpunkte in einem String zu zaehlen.
          Uebergabe: String / Rueckgabe: Anzahl
    
       b) Ein Unterprogramm um die Reinen Zahlen in einem String zu Zaehlen die mit
          Strichpunkten getrennt sind. Alle Grossbuchstaben des Strings sind in
          Kleinbuchstaben zu wandeln.
          Uebergabe: String / Rueckgabe: Anzahl der Zahlen 
    
       Das Hauptprogramm soll den String anlegen, die Unterprogramme aufrufen und 
       das Ergebnis ausgeben. Die Unterprogramme duerfen keine Ausgabe machen.
    
       Beispiel:
       454;Hubert  ;Anna;2333
    
       Ergebnis:
       3 Strichpunkte
       2 Zahlen
       String:
       454;HUBERT  ;ANNA;2333
    

    Das 1. Unterprogramm geht ja noch ganz einfach, aber beim 2. hab ich Probleme.
    Ich hab keine Ahnung wie das funzen soll.
    Könnt ihr mir ein paar Tipps geben bitte?
    Aber bitte ohne Befehle wie "fgets" und *...

    MfG C_Boy



  • naja, im prinzip musst du einfach erkennen was ne zahl ist und dementsprächend
    zählen...

    ein string ist nichts anderes als mehrere chars... und ein char ist eine ganzzahl. sprich, jedes zeichen hat einen wert. tipp, damit du dir das selber
    erarbeiten kannst:

    gebe einen char als zahl aus, also zum beispiel so:

    int main(void){
    
       char ch;
    
       scanf("%c", &ch);
    
       printf("\n%d", ch);
    
       return 0;
    }
    

    dadurch siehst du was für einen wert zum beispiel eine 5 hat. Oder wie groß der
    werte unterschied zwischen 'A' und 'a' ist.



  • Ich würde mich Char für Char durch den String hangeln und schauen ob du eine Zahl gefunden hast (überprüf am besten den ASCII Code des Zeichens). Hast du eine Zahl gefunden, kannst du zum nächsten Semikolon springen.
    Durch die erste Teilaufgabe kannst du die Positionen der Semikola.



  • int anzahlZiffernfolgen(const char *s)
    {
      int z=0,istZiffer=-1;
      while( 1 )
      {
        if( *s==';' || *s=='\0' )
        {
          if( istZiffer==1 ) ++z;
          if( *s=='\0' ) return z;
          istZiffer=-1;
        }
        else
        if( *s>='0' && *s<='9' )
        {
          if( istZiffer!=0 ) istZiffer=1;
        }
        else
          istZiffer=0;
        ++s;
      }
      return z;
    }
    

    Den Aufruf aus dem Hauptprogramm solltest du selber hinbekommen, auch funktioniert die ganze Sache mit Bibliotheksfunktionen besser, aber eure Lehrer favorisieren in ihren Aufgabenstellungen meistens sinnfreie Ziele ohne Verwendung der dafür gedachten und fehlerfreien Standardbibliotheksfunktionen.
    Wenn du die Funktion nicht verstehst, debugge dich wenigstens vorher mit mehreren Testfällen durch bevor du gleich hier wieder aufschlägst und sagst, dass du es nicht verstehst.



  • natürlich kann man ihm die lösung auch gleich aufs auge drücken =b


Anmelden zum Antworten