Problem in C mit einem Programm zum Zeichen zählen



  • sowas zum beispiel 🙄

    for (i=spalte;i<4;i++){
        printf("             |");
    }
    printf("\n"); 
    
    //oder
    
      int i,spalte=0;
        char c2;
    
    //oder
    
    }
        printf("|-------------------------------------------------------|\n");
     }
    

    egal welchen stil man verwendet das lässt dir keiner durchgehen...
    außer er ist masochist, solls ja auch geben 😃

    lg lolo



  • naja ich konnte es lesen ^^
    das reicht.

    Aber du könntest du mir helfen bei dieser toLower Sache.
    Das will er mir nicht so richtig machen.

    Lg



  • Aber du könntest du mir helfen bei dieser toLower Sache.
    Das will er mir nicht so richtig machen.

    kette[i]=tolower(kette[i]);
    

    😕

    falls du dich fragst wie so ein code dann ausschauen muß damit einem da richtig einer ab geht :p

    http://www0.us.ioccc.org/years.html

    also entweder ganz oder gar nicht in deinem fall eher garnicht 😉



  • TeamNoX schrieb:

    Was macht denn die Zeile.
    Die versteh ich nicht so ganz.

    c2=(treffer[i]>' ')?treffer[i]:' ';
    

    das ist so'ne kurzschreibweise für:

    if (treffer[i] > ' ')
      c2 = treffer[i];
    else
      c2 = ' ';
    

    ^^naja, eigentlich wäre eine funktion der bessere ersatz. das 'conditional' ist sozusagen ein 'if'-ausdruck mit rückgabewert, aber egal, das spielt hier keine geige.

    TeamNoX schrieb:

    Des weitern habe ich die Funktion tolower eingesetzt hier in der Einlesen Funktion.

    ...
    

    Aber er macht mir die nicht groß.

    tolower() macht ja auch alles klein. mit toupper() machste alles gross.
    🙂



  • noobLolo schrieb:

    kette[i]=tolower(kette[i]);
    

    Und wohin muss das?

    edit:

    das mit dem i hat mich irritiert 🙂

    es muss j heißen.

    void Einlesen(char *treffer,int *anzTreffer)
    {
       char kette[151];
       int i;
       int j;
       int c;
       printf("Bitte Zeichenkette (max.150) eingeben: ");
       fgets(kette ,151,stdin);
       for (i = 15; i < 256; i++)
       {
          c=intToChar(i);
          for (j = 0;j <strlen(kette);j++)
          {
              kette[j]=tolower(kette[j]);
              if(c==kette[j])
              {
                 anzTreffer[i]++;
                 treffer[i]=c;
              }
          }
        }
    }
    

    Lg



  • Es gibt aber noch ein Problem.

    Er macht mir macht mir Ä Ö Ü nicht klein 😞

    void printTable(char *treffer, int *anzTreffer)
    {
       int i,spalte=0;
       printf("|-------------------------------------------------------|\n|");
       for (i=1; i <=256; i++)
       {
           if(anzTreffer[i]>0)
           {
              printf("%c (0x%02X): %d |",(unsigned char)i,i,anzTreffer[i]);
              spalte++;
              if(spalte>=4)
              {
                 printf("\n|");
                 spalte=0;
              }
          }
        }
       if (spalte>0)
       {
          for (i=spalte;i<4;i++)
          {
             printf("             |");
          }
          printf("\n");
       }
       printf("|-------------------------------------------------------|\n");
    }
    
    void Einlesen(char *treffer,int *anzTreffer)
    {
     char kette[150];
     int i;
     int j;
     int c;
     printf("Bitte Zeichenkette (max.150) eingeben: ");
     fgets(kette ,151,stdin);
      for (i = 15 ; i < 256; i++)
     {
         c=intToChar(i);
         for (j = 0;j <strlen(kette);j++)
         {
             kette[j]=tolower(kette[j]);
             if(c==kette[j])
             {
    
                anzTreffer[i]++;
                treffer[i]=c;
             }
          }
     }
    }
    


  • Hey ich habe noch eine andere Iddee gehabt.
    Ist jetzt auch viel einfacher 🙂

    Hier ist der Code dazu.

    Nochmal danke für die Hilfe

    #include <string.h>
    #include <stdio.h>
    #include <ctype.h>
    char intToChar(int);
    void Einlesen(char *treffer,int *anzTreffer);
    void printTable(char *treffer, int *anzTreffer);
    int askAgain(void);
    int main()
    {
     do
     {
     char treffer[256]; int anzTreffer[256];
     char weiter;
     int i=0;
     for (i;i<256;i++)
     {
        treffer[i]=' ';
        anzTreffer[i]=0;
     }
    
      printf("========================\n");
      printf("||                     ||\n");
      printf("||  Zeichenzaehler     ||\n");
      printf("||                     ||\n");
      printf("========================\n");
      Einlesen(treffer, anzTreffer);
      printTable(treffer,anzTreffer);
    
     }while (askAgain());
     return 0;
    }
    char intToChar(int i)
    {
       char c;
       if (i<256)   
       {
           c=(char)i;
           return c;
       }
       return '\n';
    }
    
    void Einlesen(char *treffer,int *anzTreffer)
    {
     unsigned char kette[151];
     int i;
     int j;
     int c;
    
     do
     {
        kette[0] = '\0';
        printf("Bitte Zeichenkette (max.150) eingeben: ");
        scanf("%150[^\n]", kette);
        clearBuffer();
        //fgets(kette ,150,stdin);
     } while (kette[0] == '\0');
    
     j = 0;
     while (kette[j] != '\0')
     {
        kette[j] = tolower(kette[j]);
        anzTreffer[kette[j]]++;
        j++;
     }
    /*
     for (i = 15 ; i < 256; i++) 
     {
         c=intToChar(i);
         for (j = 0;j <strlen(kette);j++)
         {
             kette[j]=tolower(kette[j]);
    	 if(c==kette[j])
    	 {
    
                anzTreffer[i]++;
                treffer[i]=c;
             }
          }
     }*/
    }
    void printTable(char *treffer, int *anzTreffer){
      int i,spalte=0;
      char c2;
      printf("|-----------------------------------------------------------|\n");
      for (i=0; i <=255; i++)
      {
         if(anzTreffer[i]>0)
         {
         	if (i < 32)
    	   printf("|   ");
    	else
    	   printf("| %c ", i);
            printf("(%#04x):%3d ", i, anzTreffer[i]);
            spalte++;
            if(spalte>=4)
            {
               printf("|\n");
               spalte=0;
            }
         }
      }
      if (spalte > 0)
      {
         for ( ; spalte < 4; spalte++)
         {
            printf("|              ");
         }
         printf("|\n");
      }
      printf("|-----------------------------------------------------------|\n");
    }
    
    int askAgain()
    {
    char weiter;
    do
    {
    	printf("Moechten Sie das Programm noch einmal starten  (j/n)?");
    	scanf("%c",&weiter);
    	clearBuffer();
    }
    while(weiter == 'n' &&  weiter == 'N' &&  weiter == 'j' && weiter == 'J');
    if(weiter == 'n' || weiter == 'N')
    	return 0;
    return 1;
    }
    void clearBuffer()
    {
    	char dummy;
    	do
    	{
    		scanf("%c", &dummy);
    	} while (dummy != '\n');
    }
    

Anmelden zum Antworten