網頁

2012年12月19日 星期三

[C/C++] Check character is printable

程式人人會寫,各有巧妙不同,也因為是這樣,所以常常會有讓人意想不到的發展...

第一次看到下面的程式碼,整個人僵化了...
下列的程式碼用來判斷一個字元是否可視、可列印
int is_visual_char(unsigned char ch) { switch(ch) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '~': case '!': case '@': case '#': case '$': case '%': case '^': case '&': case '*': case '(': case ')': case '_': case '+': case '`': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': case '-': case '=': case '{': case '}': case '[': case ']': case ':': case '"': case '|': case ';': case '\'': case '\\': case '<': case ',': case '>': case '.': case '?': case '/': { return 1; } default: break; } return 0; }
再看到下列有人回覆ASCII裏1-31為控制字元,32是空格,33以上都是可視的,只需要判斷其ASCII大於32就行了。
int is_visual_char(unsigned char ch) { return ch > 32; }
心理面直吶喊那127(DEL控制字元)是鬼嗎?
說真的,現在網路那麼方便,不是都 Google to coding,多小心驗證,應該可以得到對的答案。
附上維基百科 ASCII 說明網址( 前往 )
而且這簡單的功能,C/C++早就提供了函式可以用,根本無需重新製作新輪子。

原型:extern int isprint(char c);
用法:#include <ctype.h>
功能:判斷字元c是否為可列印字元(0x20-0x7e,含空格)
說明:當c為可列印字元時,返回非零值,否則返回零。

....Orz....

沒有留言:

張貼留言