C語言字符函數中的isalnum()和iscntrl()你都知道嗎

isalnum() 函數用於檢查所傳的字符是否是字母或者十進制數字。它的函數原型如下:

  _CRTIMP int __cdecl isalnum(int _C);

返回值為非零(真)表示參數c是字母或者十進制數字,返回值為零(假)表示參數c既不是十進制數字,也不是字母。

下面通過一個簡單的例子來演示它的用法。

#include <stdio.h>
#include <ctype.h>
int main()
{
   int var1 = 'a';
   int var2 = '8';
   int var3 = '\t';
   int var4 = ' ';
   if( isalnum(var1) )
   {
      printf("var1 = |%c| 是字母數字\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是字母數字\n", var1 );
   }
   if( isalnum(var2) )
   {
      printf("var2 = |%c| 是字母數字\n", var2 );
   }
   else
   {
      printf("var2 = |%c| 不是字母數字\n", var2 );
   }
   if( isalnum(var3) )
   {
      printf("var3 = |%c| 是字母數字\n", var3 );
   }
   else
   {
      printf("var3 = |%c| 不是字母數字\n", var3 );
   }
   if( isalnum(var4) )
   {
      printf("var4 = |%c| 是字母數字\n", var4 );
   }
   else
   {
      printf("var4 = |%c| 不是字母數字\n", var4 );
   }
   return(0);
}

分別定義4個變量,一個字母,一個數字,一個制表符,一個空字符,輸出結果如下:

image.png

前兩個變量返回值為真,後兩個變量返回值為假。

isalnum() 函數可以同時檢測字母或者數字,如果要單獨檢測字母或者數字的的話,庫函數中還提供瞭專門的檢測函數isalpha 和 isdigit,他們的函數原型如下:

  _CRTIMP int __cdecl isalpha(int _C);
  _CRTIMP int __cdecl isdigit(int _C);

將上面代碼中的函數替換為這兩個函數。

#include <stdio.h>
#include <ctype.h>
int main()
{
   int var1 = 'a';
   int var2 = '8';
   if( isalpha(var1) )
   {
      printf("var1 = |%c| 是字母\n", var1 );
   }
   else
   {
      printf("var1 = |%c| 不是字母\n", var1 );
   }
   
   if( isdigit(var2) )
   {
      printf("var2 = |%c| 是數字\n", var2 );
   }
   else
   {
      printf("var2 = |%c| 不是數字\n", var2 );
   }
   return(0);
}

運行結果如下:

image.png

C語言標準庫裡面還提供瞭控制字符檢測函數iscntrl

所謂 “控制字符”是指那些具有某種特殊功能、不會顯示在屏幕上、不會占用字符位置的特殊字符。在ASCII碼表中,前32個字符就是控制字符。

image.png

控制字符檢測函數iscntrl原型如下:

     _CRTIMP int __cdecl iscntrl(int _C);

如果 c 是一個控制字符,則該函數返回非零值,否則返回 0。

下面通過一段簡單的代碼演示它的用法。

#include <stdio.h>
#include <ctype.h>
int main()
{
   int i = 0, j = 0;
   char str1[] = "abc \a def \t gh";
   char str2[] = "123 \n 456";
   /* 輸出字符串,直到控制字符 \a */
   while( !iscntrl(str1[i]) ) 
   {
      putchar(str1[i]);
      i++;
   }
   /* 輸出字符串,直到控制字符 \n */
   while( !iscntrl(str2[j]) ) 
   {
      putchar(str2[j]);
      j++;
   }
   return(0);
}

定義兩個字符串,中間有控制字符,然後打印字符串的時候檢測字符是否為控制字符,如果是控制字符就結束打印。輸出結果如下:

image.png

同輸出結果可以看到隻打印瞭控制符前面的字符。

與控制字符相對的就是可打印字符,可打印字符是指那些會顯示在屏幕上、會占用字符位置的“普通”字符。在ASCII碼表中編碼32-127的字符都是可打印字符。可打印字符就是經常用到的數字、字母、符號等這些在屏幕上可以看見的字符。

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!     

推薦閱讀: