2015-01-20 3 views
-2

Я нашел эту функцию в Интернете, и я считаю ее очень полезной , но я новичок в программировании, и кто-то может объяснить, что именно это происходит сделатьФункция подсчета количества разных символов в строке

#include <stdio.h> 

    int diffcount(char* s) 
    { 
     unsigned char seen[127]; 
     int cnt=0,i; 
     for(i=0;i<127;i++) 
      seen[i]=0; 
     for(i=0;s[i];i++) 
     { 
      if(!seen[(int)s[i]]) 
      { 
       cnt++; 
       seen[(int)s[i]]=1; 
      } 
     }return cnt; 
    } 

int main(void) { 
    char string[20]; 
    scanf("%s",string); 
    printf("Razlicitih znakova: %d\n", diffcount(string)); 

    return 0; 
} 
+2

Вкратце: эта функция подсчитывает * сколько различных символов в строке * – vaultah

+0

, что 'diffcount() 'должен делать? Я не буду читать функцию, сначала дайте описание того, что она делает. –

ответ

2

Прежде всего инициализировать пустой массив нулей Int seen[127]; «видел» массив используется, чтобы выяснить, является ли символ с кодом я был встречен в массиве s: if seen[i]==1 чем (char)i было строка s.

После этого мы делаем петлю через char* s и проверить, если символ s[i] уже встречались, глядя на значение seen[s[i]]; и если оно ложно положить seen[s[i]]=true (потому что мы встречались с ним) и увеличить счетчик. Результатом функции является значение переменной CNT

Это также может помочь: каждый символ имеет его код между нулем и 127. Например, (int)'a' = 97. BOOL в C является такой же, как int, поэтому мы иногда используем 0 и 1 вместо истинного и ложного

+0

«каждый символ имеет код от нуля до 127», вызывает сомнения. Обычно значения 'char' находятся в диапазоне ASCII от 0 до 127, но' char' имеет как минимум 256 различных значений. – chux

+0

@chux да, вы, конечно, правы. Я не упомянул об этом для простоты, должен ли я отредактировать ответ? –

+0

IMO, OP не осознает этого и выиграет от большей ясности. Учитывая, что потенциал 'char' подписан, а диапазон' char' может быть довольно большим, просто проверка на 0 до 126 (или 127) может быть достаточной. – chux

Смежные вопросы