??個(gè)人主頁(yè):修修修也
??所屬專欄:C語(yǔ)言
??操作環(huán)境:Visual Studio 2022
目錄
一.字符的類型分類
1.ASCII的定義:
?2.ASCII的產(chǎn)生原因是:
3.ASCII的內(nèi)容:
二.字符類型判斷相關(guān)庫(kù)函數(shù)
1.isdigit(),用于判斷字符是否為數(shù)字。
2. isalpha(),用于判斷字符是否為字母。
3. isalnum(),用于判斷字符是否為數(shù)字或字母。
4. isspace(),用于判斷字符是否為空格字符。
5. isupper()和 islower(),分別用于判斷字符是否為大寫字母和小寫字母。
6. iscntrl(),用于判斷字符是否為控制字符。
7. isprint(),用于判斷字符是否為可打印字符。
8. ispunct(),用于判斷字符是否為標(biāo)點(diǎn)符號(hào)。
三.不使用庫(kù)函數(shù)判斷字符類型
1.ASCII碼值判斷法
判斷是否是'a'字符:
判斷是否是數(shù)字字符:
判斷是否是小寫字母字符:
判斷是否是大寫字母字符:
判斷是否是字母字符:
判斷是否是數(shù)字字符或字母字符:
判斷是否為空格字符:
判斷是否為控制字符:
判斷是否為可打印字符:
判斷是否為標(biāo)點(diǎn)符號(hào)字符:
2.字符直接判斷法
判斷是否是'a'字符:
判斷是否是數(shù)字字符:
判斷是否是小寫字母字符:
判斷是否是大寫字母字符:
判斷是否是字母字符:
判斷是否是數(shù)字字符或字母字符:
判斷是否為空格字符:
判斷是否為控制字符:
判斷是否為可打印字符:
判斷是否為標(biāo)點(diǎn)符號(hào)字符:
一.字符的類型分類
1.ASCII的定義:
先來(lái)看看百度百科對(duì)ASCII的定義:
?2.ASCII的產(chǎn)生原因是:
?????? 在計(jì)算機(jī)中,所有的數(shù)據(jù)在存儲(chǔ)和運(yùn)算時(shí)都要使用二進(jìn)制數(shù)表示(因?yàn)橛?jì)算機(jī)用高電平和低電平分別表示1和0),例如,像a、b、c、d這樣的52個(gè)字母(包括大寫)以及0、1等數(shù)字還有一些常用的符號(hào)(例如*、#、@等)在計(jì)算機(jī)中存儲(chǔ)時(shí)也要使用二進(jìn)制數(shù)來(lái)表示,而具體用哪些二進(jìn)制數(shù)字表示哪個(gè)符號(hào),當(dāng)然每個(gè)人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通信而不造成混亂,那么大家就必須使用相同的編碼規(guī)則,于是美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織就出臺(tái)了ASCII編碼,統(tǒng)一規(guī)定了上述常用符號(hào)用哪些二進(jìn)制數(shù)來(lái)表示。
3.ASCII的內(nèi)容:
?
根據(jù)ASCII碼,我們大致可以將字符分為非打印控制字符和打印字符,其中打印字符又能細(xì)分為:標(biāo)點(diǎn)符號(hào),數(shù)字,大寫字母,小寫字母......等.
既然有分類,那么也就有分類統(tǒng)計(jì)的需求,接下來(lái)我們來(lái)學(xué)習(xí)一下該如何判斷字符的類型。
二.字符類型判斷相關(guān)庫(kù)函數(shù)
1.isdigit(),用于判斷字符是否為數(shù)字。
先來(lái)看cplusplus網(wǎng)站官方對(duì)isdigit()函數(shù)的解釋:
注意,isdigit()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看isdigit()函數(shù)的原型:
int isdigit ( int c );
綜上可知,當(dāng)你向isdigit()函數(shù)傳輸一個(gè)字符數(shù)據(jù)(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是十進(jìn)制數(shù)字字符,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
注意,十進(jìn)制數(shù)字字符在ASCII碼表中的對(duì)應(yīng)值為:48~57。
我們?cè)诰幾g器中測(cè)試使用一下該函數(shù):
2. isalpha(),用于判斷字符是否為字母。
先來(lái)看cplusplus網(wǎng)站官方對(duì)isalpha()函數(shù)的解釋:
注意isalpha()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看isalpha()函數(shù)的原型:
int isalpha ( int c );
綜上可知,當(dāng)你向isalpha()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是字母字符,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
注意,字母字符在ASCII碼表中的對(duì)應(yīng)值為:大寫字符65~90;小寫字符97~122。
我們?cè)囍诰幾g器中測(cè)試一下該函數(shù):
3. isalnum(),用于判斷字符是否為數(shù)字或字母。
先來(lái)看cplusplus網(wǎng)站官方對(duì)isalnum()函數(shù)的解釋:
isalnum()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看isalnum()函數(shù)的原型:
int isalnum ( int c );
綜上可知,當(dāng)你向isalnum()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是字母或數(shù)字字符,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
注意,十進(jìn)制數(shù)字字符和字母字符在ASCII碼表中的對(duì)應(yīng)值為:十進(jìn)制數(shù)字48~57;大寫字母65~90;小寫字母97~122。
我們?cè)囍诰幾g器中測(cè)試一下該函數(shù):
4. isspace(),用于判斷字符是否為空格字符。
先來(lái)看cplusplus網(wǎng)站官方對(duì)isspace()函數(shù)的解釋:
isspace()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看isspace()函數(shù)的原型:
int isspace ( int c );
綜上可知,當(dāng)你向isspace()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是空格字符,包括空格、制表符、換行符等,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
注意,空格字符是指:SPC(空格符),TAB(水平制表符),LF(換行/新行),VT(豎直制表符),F(xiàn)F(換頁(yè)/新頁(yè)),CR(回車)。
它們的ASCII碼值分別為:
代碼 | 含義 | ASCII碼值 |
---|---|---|
SPC | 空格符 | 32 |
TAB | 水平制表符 | 9 |
LF | 換行/新行 | 10 |
VT | 豎直制表符 | 11 |
FF | 換頁(yè)/新頁(yè) | 12 |
CR | 回車 | 13 |
我們?cè)囍诰幾g器中測(cè)試一下該函數(shù):
5. isupper()和 islower(),分別用于判斷字符是否為大寫字母和小寫字母。
我們先來(lái)看cplusplus網(wǎng)站官方對(duì)isupper()函數(shù)的解釋:
isupper()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看isupper()函數(shù)的原型:
int isupper ( int c );
綜上可知,當(dāng)你向isupper()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是大寫字母,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
注意,大寫字母字符在ASCII碼表中的對(duì)應(yīng)值為65~90。
接下來(lái)再來(lái)看islower()函數(shù):
islower()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看islower()函數(shù)的原型:
int islower ( int c );
綜上可知,當(dāng)你向islower()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是小寫字母,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
注意,小寫字母字符在ASCII碼表中的對(duì)應(yīng)值為:97~122。
6. iscntrl(),用于判斷字符是否為控制字符。
先來(lái)看cplusplus網(wǎng)站官方對(duì)iscntrl()函數(shù)的解釋:
iscntrl()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看iscntrl()函數(shù)的原型:
int iscntrl ( int c );
綜上可知,當(dāng)你向iscntrl()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是控制字符,包括回車符、換行符、制表符等,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
而控制字符包括下表中的所有字符,即從'NUL'到'US'。并且還包含ASCII碼值為127的'DEL'字符。
注意,控制字符在ASCII碼表中的對(duì)應(yīng)值為:0~31;以及127。
7. isprint(),用于判斷字符是否為可打印字符。
先來(lái)看cplusplus網(wǎng)站官方對(duì)isprint()函數(shù)的解釋:
isprint()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看isprint()函數(shù)的原型:
int isprint ( int c );
綜上可知,當(dāng)你向isprint()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是可打印字符,包括字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
可打印字符包括下表中的所有字符,即從 '? '(空格)到 ‘~’(波浪號(hào))。
注意,可打印字符在ASCII碼表中的對(duì)應(yīng)值為:32~126。
8. ispunct(),用于判斷字符是否為標(biāo)點(diǎn)符號(hào)。
先來(lái)看cplusplus網(wǎng)站官方對(duì)ispunct()函數(shù)的解釋:
ispunct()函數(shù)的原型定義在頭文件<ctype.h>中,因此使用前需要包含該頭文件。
下面我們來(lái)看ispunct()函數(shù)的原型:
int ispunct ( int c );
綜上可知,當(dāng)你向ispunct()函數(shù)傳輸一個(gè)字符(實(shí)際是它的ASCII值)時(shí),它會(huì)判斷其是否是標(biāo)點(diǎn)符號(hào)字符,如果是,它會(huì)返回給你一個(gè)非零的數(shù),如果不是,則會(huì)返回0。
ispunct()函數(shù)判斷的標(biāo)點(diǎn)字符包括ASCII碼表中除了空格、數(shù)字和字母以外的所有字符,如逗號(hào)、句號(hào)、問(wèn)號(hào)、感嘆號(hào)、分號(hào)、冒號(hào)、括號(hào)、引號(hào)等等。
具體來(lái)說(shuō),它包括ASCII碼表中的33-47、58-64、91-96、123-126這些字符。
?三.不使用庫(kù)函數(shù)判斷字符類型
1.ASCII碼值判斷法
因?yàn)槲覀冎溃琧har類型的字符數(shù)據(jù)存儲(chǔ)的字符信息實(shí)際是該字符的ASCII碼值,因此當(dāng)我們判斷其是否是某一字符或某一類字符時(shí),只需判斷它和標(biāo)準(zhǔn)ASCII碼中的值是否相等即可,而當(dāng)碰到需要判斷某一類字符時(shí),我們也可以巧妙的使用他們所處的ASCII碼值區(qū)間來(lái)判斷
如:
判斷是否是'a'字符:
int my_move(char ch)
{
if(ch==97)
return 1;
else
return 0;
}
判斷是否是數(shù)字字符:
int my_isdigit(char ch)
{
if(ch>=48&&ch<=57)
return 1;
else
return 0;
}
?判斷是否是小寫字母字符:
int my_islower(char ch)
{
if(ch>=97&&ch<=122)
return 1;
else
return 0;
}
判斷是否是大寫字母字符:
int my_isupper(char ch)
{
if(ch>=65&&ch<=90)
return 1;
else
return 0;
}
判斷是否是字母字符:
int my_isalphA(char ch)
{
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))
return 1;
else
return 0;
}
判斷是否是數(shù)字字符或字母字符:
int my_isalnum(char ch)
{
if((ch>=48&&ch<=57)||(ch>=97&&ch<=122)||(ch>=65&&ch<=90))
return 1;
else
return 0;
}
判斷是否為空格字符:
int my_space(char ch)
{
if((ch>=9&&ch<=13)||(ch==32))
return 1;
else
return 0;
}
判斷是否為控制字符:
int my_cntrl(char ch)
{
if((ch>=0&&ch<=31)||(ch==127))
return 1;
else
return 0;
}
判斷是否為可打印字符:
int my_isprint(char ch)
{
if(ch>=32&&ch<=126)
return 1;
else
return 0;
}
判斷是否為標(biāo)點(diǎn)符號(hào)字符:
int my_punct(char ch)
{
if((ch>=33&&ch<=47)||(ch>=58&&ch<=64)||(ch>=91&&ch<=96)||(ch>=123&&ch<=126))
return 1;
else
return 0;
}
2.字符直接判斷法
但有時(shí)候,我們可能記不太清楚字符的ASCII碼值了,但我們同樣可以直接使用字符本身進(jìn)行判斷.
但需要特別注意,使用字符本身判斷時(shí),必須用單引號(hào)將字符標(biāo)注起來(lái),以便編譯器將其識(shí)別為一個(gè)字符,否則可能會(huì)導(dǎo)致出錯(cuò)。
同時(shí)有些沒(méi)法直接在C語(yǔ)言中表示的控制字符,有的需要借助轉(zhuǎn)義字符進(jìn)行判斷,有的則只能使用ASCII碼值判斷。
判斷是否是'a'字符:
int my_move(char ch)
{
if(ch=='a')
return 1;
else
return 0;
}
函數(shù)名為my_move,作用是判斷一個(gè)字符是否為字母a。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是字母a則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的值是否等于字母a的ASCII碼值,因?yàn)樽帜竌的ASCII碼值為97,所以如果參數(shù)ch的值等于97,即為字母a,則返回1,否則返回0。
判斷是否是數(shù)字字符:
int my_isdigit(char ch)
{
if(ch>='0'&&ch<='9')
return 1;
else
return 0;
}
函數(shù)名為my_isdigit,作用是判斷一個(gè)字符是否為數(shù)字字符。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是數(shù)字字符則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果該字符在0到9之間,則返回1,否則返回0。
判斷是否是小寫字母字符:
int my_islower(char ch)
{
if(ch>='a'&&ch<='z')
return 1;
else
return 0;
}
函數(shù)名為my_islower,作用是判斷一個(gè)字符是否為小寫字母。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是小寫字母則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果該字符的ASCII碼值在小寫字母的ASCII碼值范圍內(nèi),則返回1,否則返回0。其中,小寫字母的ASCII碼值范圍是從97(字符'a')到122(字符'z')。
判斷是否是大寫字母字符:
int my_isupper(char ch)
{
if(ch>='A'&&ch<='Z')
return 1;
else
return 0;
}
函數(shù)名為my_isupper,作用是判斷一個(gè)字符是否為大寫字母。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是大寫字母則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值是否在大寫字母的ASCII碼值范圍內(nèi),如果是,則返回1,否則返回0。
判斷是否是字母字符:
int my_isalphA(char ch)
{
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
return 1;
else
return 0;
}
函數(shù)名為my_isalpha,作用是判斷一個(gè)字符是否為字母。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是字母則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果該字符的ASCII碼值在大寫字母或小寫字母的范圍內(nèi),則返回1,否則返回0。
判斷是否是數(shù)字字符或字母字符:
int my_isalnum(char ch)
{
if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
return 1;
else
return 0;
}
函數(shù)名為my_isalnum,作用是判斷一個(gè)字符是否為字母或數(shù)字字符。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是字母或數(shù)字字符則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果字符的ASCII碼值在數(shù)字0到9的ASCII碼值范圍內(nèi),則該字符是數(shù)字字符,返回1;
如果字符的ASCII碼值在小寫字母a到z的ASCII碼值范圍內(nèi)或者在大寫字母A到Z的ASCII碼值范圍內(nèi),則該字符是字母字符,返回1;
否則返回0,表示該字符既不是字母字符也不是數(shù)字字符。
判斷是否為空格字符:
int my_space(char ch)
{
if ((ch >='\t'&&ch <= '\n') || (ch == ' '))
return 1;
else
return 0;
}
函數(shù)名為my_space,作用是判斷一個(gè)字符是否為空格或者制表符。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是空格或者制表符則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果字符的ASCII碼值在水平制表符(\t)到換行符(\n)的ASCII碼值范圍內(nèi),或者該字符是空格(ASCII碼值為32),則該字符是空格或者制表符,返回1;
否則,該字符不是空格或者制表符,返回0。
判斷是否為控制字符:
int my_cntrl(char ch)
{
if((ch>='\0'&&ch<='\x1F')||(ch=='\x7F'))
return 1;
else
return 0;
}
函數(shù)名為my_cntrl,作用是判斷一個(gè)字符是否為控制字符。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是控制字符則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果該字符的ASCII碼值在0到31之間(包括0和31),或者等于127(DEL字符),則認(rèn)為該字符是控制字符,返回1;否則返回0。
判斷是否為可打印字符:
int my_isprint(char ch)
{
if(ch>=' '&&ch<='~')
return 1;
else
return 0;
}
函數(shù)名為my_isprint,作用是判斷一個(gè)字符是否為可打印字符。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是可打印字符則返回1,否則返回0。
該函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,ASCII碼值在32~126之間的字符被視為可打印字符。
如果字符的ASCII碼值在這個(gè)范圍內(nèi),即該字符是可打印字符,則函數(shù)返回1;
否則,即該字符不是可打印字符,則函數(shù)返回0。
判斷是否為標(biāo)點(diǎn)符號(hào)字符:
int my_punct(char ch)
{
if((ch>='!'&&ch<='/')||(ch>=':'&&ch<='@')||(ch>='['&&ch<='`')||(ch>='{'&&ch<='~'))
return 1;
else
return 0;
}
函數(shù)名為my_punct,作用是判斷一個(gè)字符是否為標(biāo)點(diǎn)符號(hào)。
函數(shù)接受一個(gè)字符類型的參數(shù)ch,返回一個(gè)整型值,如果該字符是標(biāo)點(diǎn)符號(hào)則返回1,否則返回0。
函數(shù)的實(shí)現(xiàn)是通過(guò)判斷字符的ASCII碼值,如果該字符是ASCII碼表中四個(gè)范圍內(nèi)的字符之一,則返回1,否則返回0。
具體來(lái)說(shuō),這個(gè)函數(shù)會(huì)判斷字符是否在以下四個(gè)范圍內(nèi):
- ASCII碼表中的感嘆號(hào)到斜杠之間的字符,即'!'到'/';
- ASCII碼表中的冒號(hào)到@之間的字符,即':'到'@';
- ASCII碼表中的左方括號(hào)到反引號(hào)之間的字符,即'['到'`';
- ASCII碼表中的左花括號(hào)到波浪號(hào)之間的字符,即'{'到'~'。
如果字符屬于以上任意一個(gè)范圍,則說(shuō)明它是標(biāo)點(diǎn)符號(hào),函數(shù)返回1;否則返回0。
結(jié)語(yǔ)
希望這篇字符類型的三種判斷方法的介紹到能對(duì)大家有所幫助,歡迎大佬們留言或私信與我交流.
學(xué)海漫浩浩,我亦是行人!大家一起學(xué)習(xí),一起進(jìn)步!
相關(guān)內(nèi)容推薦:
【C語(yǔ)言】字母轉(zhuǎn)換大小寫的三種方法
【C語(yǔ)言】qsort()函數(shù)詳解:能給萬(wàn)物排序的神奇函數(shù)
【C語(yǔ)言】整形數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)
【C語(yǔ)言】結(jié)構(gòu)體的大小是如何計(jì)算的(結(jié)構(gòu)體對(duì)齊)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-735596.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-735596.html
到了這里,關(guān)于【C語(yǔ)言】判斷字符類型的三種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!