C語言: 分類統計字元個數

枕綿發表於2020-12-17

本題要求實現一個函式,統計給定字串中英文字母、空格或回車、數字字元和其他字元的個數。

函式介面定義:

void StringCount( char s[] );

其中 char s[] 是使用者傳入的字串。函式StringCount須在一行內按照

letter = 英文字母個數, blank = 空格或回車個數, digit = 數字字元個數, other = 其他字元個數

的格式輸出

裁判測試程式樣例:

#include <stdio.h>
#define MAXS 15

void StringCount( char s[] );
void ReadString( char s[] ); /* 由裁判實現,略去不表 */

int main()
{
    char s[MAXS];

    ReadString(s);
    StringCount(s);

    return 0;
}

/* Your function will be put here */

輸入樣例:

aZ &
09 Az

輸出樣例:

letter = 4, blank = 3, digit = 2, other = 1
void StringCount( char s[] )
{
    int let=0,bla=0,dig=0,oth=0;
    
   for(int i=0;s[i]!='\0';i++)//字串以'\0'結尾
    {
       if('A'<=s[i]&&s[i]<='Z'||'a'<=s[i]&&s[i]<='z')  let++; 
       else if(s[i]==' '||s[i]=='\n')  bla++;
       else if('0'<=s[i]&&s[i]<='9')    dig++; 
       else    oth++;
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d",let,bla,dig,oth);
}

然後在這裡面有幾點要注意一下:
1: if('A'<=s[i]&&s[i]<='Z'||'a'<=s[i]&&s[i]<='z')
因為C語言中,與或非的優先順序:非>與>或
即:! —> & —> ^ —> | —> && —> ||,
所以裡面的條件可以不用分別用括號括起來(當然,括起來的可讀性更高,但懶癌症晚期的俺就是愛偷懶,嘻嘻(#.#))
2:注意if('A'<=s[i]&&s[i]<='Z'||'a'<=s[i]&&s[i]<='z')這裡面字母的大小寫哦!(相信諸位的慧眼肯定比俺銳利,嘿嘿٩(๑>◡<๑)۶ )
3:else if('0'<=s[i]&&s[i]<='9')這裡面的數字一定一定一定要帶’’,切記,'1’和1,在C語言裡是兩樣東西,不可混為一談,前者是字元,表示字元1,佔四個位元組,而後者是整型,表示數字1,佔一個位元組。(沒錯,這也是俺踩過的坑,哈哈,我太水了呀(/ω\))

相關文章