2015-01-20 44 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 2015-01-20 18:59:08

+0

什麼是'DIFFCOUNT() 「應該這樣做?我不會閱讀這個函數,首先給它描述它的功能。 – 2015-01-20 18:59:30

回答

2

首先我們初始化爲零的空數組詮釋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之間的代碼。 布爾在C是一樣的爲int,這就是爲什麼我們有時會用0和1,而不是真假

+0

「每個字符都是零和127之間的代碼」是有問題的。通常所見的char值在0到127的ASCII範圍內,但是'char'至少有256個不同的值。 – chux 2015-01-20 19:59:58

+0

@chux是的,你當然是對的。我沒有提到它的簡單性,我應該編輯答案嗎? – 2015-01-20 20:39:07

+0

IMO,OP沒有意識到這一點,並將獲得更多的清晰度。鑑於潛在的'char'被簽名並且'char'的範圍可能很大,只需檢查0到126(或127)就足夠了。 – chux 2015-01-20 21:27:24

相關問題