относительно:
long len=strlen(text);
Функция: strlen()
возвращает 'size_t' (фактически, 'unsigned long int'), опубликованный код присваивает это 'long int' Это рискованно.Предложите использовать:
size_t len = strlen( text );
Кстати: обратите внимание на правильное использование горизонтального промежутка для удобства чтения людьми
относительно:
long len=strlen(text);
for (i=0; i<len; i++)
{
char c=text[i];
c= tolower(c);
text[i]=c;
}
этот беспорядок может быть заменен на:
for( size_t i=0; text[i]; i++ )
{
text[i] = tolower( text[i] );
}
, который останавливает цикл при обнаружении завершающего байта NUL
относительно:
bool seen[256];
for (i=0; i<256; i++)
{
seen[i]=false;
}
, это можно заменить простым
int seen[ 256 ] = {0};
Помните, что любое значение, отличное от 0, воспринимается как 'true'
Следующий предложенный код:
- безупречной компиляции
- выполняет требуемую функциональность
- содержит соответствующий комментарий для каждого блока кода
- использует байт NUL в конце текста для завершения некоторых циклов
- избегает «магических» чисел (например, 256)
- не включает заголовочные файлы, которые не используются
- исправляет логическую ошибку «возврата» внутри конечного цикла
А теперь предложенный код:
#include <stdio.h> // printf()
#include <ctype.h> // tolower()
#define MAX_CHAR 256
int main( void )
{
char text[]="C language is a very powerful language that allows programmers to fully control their computers";
// set all text to lower case
for ( int i=0; text[i]; i++ )
{
text[i] = (char)tolower( text[i] );
}
// init work array to all 0's
int seen[ MAX_CHAR ] = {0};
// count how many times each char in text
for (size_t i=0; text[i]; i++)
{
seen[ (int)text[i] ]++;
}
// loop through array, displaying each char in text
// and how many times it was seen
for( int i=0; i<MAX_CHAR; i++ )
{
if( seen[i] )
{
printf( "%c : %d -:", i, seen[i] );
}
}
}
при запуске, это результат:
: 14 -:a : 8 -:c : 3 -:e : 7 -:f : 2 -:g : 5 -:h : 2 -:i : 2 -:l : 8 -:m : 3 -:n : 3 -:o : 7 -:p : 3 -:r : 8 -:s : 4 -:t : 6 -:u : 5 -:v : 1 -:w : 2 -:y : 2 -:
предлагаем повторноформатирование вывода для удобства чтения