Как изменить частоту букв в процентах?

#include <stdio.h>
#include <string.h>

int main()
{
   char string[100];
   int c = 0, count[26] = {0};

   printf("Enter a string\n");
   gets(string);

   while ( string[c] != '\0' )
   {

      if ( string[c] >= 'a' && string[c] <= 'z' ) 
         count[string[c]-'a']++;

      else if (string[c] >= 'A' && string[c] <= 'Z')
         count[string[c]-'A']++;
      c++;

   }

   for ( c = 0 ; c < 26 ; c++ )
   {
      if( count[c] != 0 )
     printf( "%c %d\n", c+'a', count[c]);
   }

   return 0;
}

Так что мне удалось заставить работать код для подсчета частот букв как числа. Но мое назначение говорит мне представлять его в процентах от всей строки.

Так, например, вход aaab дал бы мне - 0,7500, b - 0,2500.

Как бы я изменил этот код, чтобы он представлял его как процент, а не как число?

Кроме того, если бы я делал это, когда пользователь вводит строки до EOF, я просто удаляю оператор печати "Enter a string" и заменяю while ( string[c]!= '\0') на while ( string[c]!= EOF)?

3 ответа

Решение

Просто добавьте накопительную переменную, которая при каждом считывании символа увеличивается на единицу (при условии, что вы хотите посчитать частоту среди допустимых символов az и AZ). В конце разделите счет на такую ​​переменную.

#include <stdio.h>
#include <string.h>

int main()
{
   char string[100];
   int c = 0, count[26] = {0};
   int accum = 0;

   printf("Enter a string\n");
   gets(string);

   while ( string[c] != '\0' )
   {

      if ( string[c] >= 'a' && string[c] <= 'z' ){
         count[string[c]-'a']++;
         accum++;
      }

      else if (string[c] >= 'A' && string[c] <= 'Z'){
          count[string[c]-'A']++;
          accum++;
      }
      c++;
   }

   for ( c = 0 ; c < 26 ; c++ )
   {
      if( count[c] != 0 )
          printf( "%c %f\n", c+'a', ((double)count[c])/accum);
   }

   return 0;
}

В вашем втором для цикла, используйте

100.0 * count[c] / strlen(string)

чтобы получить процент

Внутри цикла for, логика cout/string len даст значение отношения.

   for ( c = 0 ; c < 26 ; c++ )
   {
      if( count[c] != 0 ){
    float val = count[c] ;
    val = (val/strlen (string)) * 100.0;

             printf( "%c %d %%:%f\n", c+'a', count[c], val);

    }
   }
Другие вопросы по тегам