??前言:
這篇文章對(duì)我最近學(xué)習(xí)的有關(guān)字符串的函數(shù)做一個(gè)總結(jié)和整理,主要講解字符函數(shù)和字符串函數(shù)(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用場(chǎng)景和一些注意事項(xiàng)(附上實(shí)例)
??個(gè)人簡(jiǎn)介:努力學(xué)習(xí)ing
??個(gè)人專欄:C語(yǔ)言入門基礎(chǔ)
??CSDN主頁(yè) 愚潤(rùn)求學(xué)
??每日雞湯:生活在自己的光里,不斷吹飲內(nèi)心的火焰
一,字符分類函數(shù)
??C語(yǔ)言里提供一系列的函數(shù)專門用于字符分類,便于我們**判斷一個(gè)字符是屬于什么類型的字符**????
如islower:
int islower(int c)
islower
就會(huì)判斷參數(shù)部分的c是否是小寫字母(字符→ASCII值)
1,使用實(shí)例(islower)
●這些函數(shù)的使用方法非常類似,一下對(duì)其中的islower做使用的展示????
代碼作用:用islower判斷字符后,將小寫的字母轉(zhuǎn)換為大寫,其他字符不變
#include<stdio.h>
#include<ctype.h>
int main()
{
char str[] = "Test Islower.";
int sz = sizeof(str) / sizeof(str[0]);
for (int i = 0; i < sz; i++) //用for循環(huán),因?yàn)橐淮沃荒芘袛嘁粋€(gè)字符
{
if (islower(str[i])) //判斷是否為小寫,小寫就加入if語(yǔ)句
{
str[i] = str[i] - 32; //將小寫轉(zhuǎn)換為大寫
}
putchar(str[i]); //輸出字符
}
return 0;
}
輸出結(jié)果????
二,字符轉(zhuǎn)換函數(shù)
下面介紹兩種可以實(shí)現(xiàn)大小寫之間互相轉(zhuǎn)化的函數(shù)????
1,int tolower(int c);
將大寫字母轉(zhuǎn)換為小寫字母2,int toupper(int c);
將小寫字母轉(zhuǎn)換為大寫字母
在上一個(gè)用islower判斷大小寫后,我們是通過(guò)小寫字符-32的形式來(lái)轉(zhuǎn)化為大寫字符的,這次我們使用toupper函數(shù)來(lái)實(shí)現(xiàn)轉(zhuǎn)換????
#include<stdio.h>
#include<ctype.h>
int main()
{
char str[] = "Test Islower.";
int sz = sizeof(str) / sizeof(str[0]);
for (int i = 0; i < sz; i++)
{
if (islower(str[i]))
{
toupper(str[i]); //使用toupper函數(shù)
}
putchar(str[i]);
}
return 0;
}
輸出結(jié)果????
三,函數(shù)strlen
用來(lái)計(jì)算字符串的長(zhǎng)度
1,基本介紹
我們來(lái)看一下C語(yǔ)言官網(wǎng)對(duì)它的介紹????
●原文:C字符串的長(zhǎng)度是由終止空字符決定:C字符串的長(zhǎng)度等于字符串開(kāi)頭和終止字符之間的字符數(shù)(但不包括終止字符本身)
●通俗來(lái)講就是:字符串開(kāi)頭到\0
之前字符的個(gè)數(shù)
2,使用注意事項(xiàng)
??但是這也造成了strlen的“固執(zhí)”,strlen只有遇到\0
才會(huì)停止查找,否則就會(huì)一直查找
請(qǐng)看下面的代碼????
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcde";
char arr2[] = { 'a','b','c','d','e'};
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}
運(yùn)行結(jié)果????
?結(jié)果不一樣就是因?yàn)?strong>strlen在arr2的未知位置才找到了\0
arr1數(shù)組中存放的是:a b c d e \0
程序自動(dòng)在字符串后面補(bǔ)充了\0
arr2數(shù)組中存放的是:a b c d e
沒(méi)有\0
,因此strlen會(huì)一直找\0
找到才停止,輸出結(jié)果 33 其實(shí)是一個(gè)隨機(jī)值(剛好strlen在內(nèi)存里找到了\0
)
四,strcpy和strncpy
頭文件:<string.h>
作用:復(fù)制字符串
1,strcpy
我們先來(lái)看strcmp
????
函數(shù)原型:
char* strcpy(char* destination, const char* source);
●對(duì)重要的內(nèi)容解讀一下與數(shù)理:
1,原字符串必須以\0
結(jié)尾,函數(shù)復(fù)制完\0
以后就會(huì)停止
2,目標(biāo)空間要足夠大,要存放的下所要復(fù)制的字符串
3,目標(biāo)空間必須可修改(比如:字符數(shù)組可以修改,但是,常量字符串就是不能修改的)
實(shí)例????
但是,如果源字符里有\0
,則復(fù)制完\0
就會(huì)停止????
2,strncpy
和strcpy的區(qū)別就是多了一個(gè)n→num(復(fù)制的字符的個(gè)數(shù))
char* strncpy(char* destination, const char* source, size_t num);
●復(fù)制num個(gè)字符從源字符串到目標(biāo)空間
●如果num>源字符串長(zhǎng)度,則復(fù)制完源字符串后,目標(biāo)后面追加0,直到num個(gè)
????
可以觀察到:
num的限制就是剛好復(fù)制num個(gè)字符,并且沒(méi)有更改目標(biāo)空間原來(lái)后面的內(nèi)容
五,strcat和strncat
頭文件:<string.h>
作用:連接字符串
1,strcat
?提煉一下:
●源字符串必須以\0
結(jié)尾,函數(shù)追加完\0
以后就會(huì)停止
●從目標(biāo)中的終止空字符串開(kāi)始覆蓋(目標(biāo)字符串也必須以\0
結(jié)尾,因?yàn)槟繕?biāo)字符串的\0
就是開(kāi)始追加的位置,這個(gè)\0
會(huì)被覆蓋掉)
●目標(biāo)空間要足夠大(>(目標(biāo)字符串+源字符串)的大?。?br> ●目標(biāo)空間必須可以修改
實(shí)例????
可見(jiàn),源字符串中間有空字符也不會(huì)停止
2,strncat
?區(qū)別:
●從源字符串追加num個(gè)字符到目標(biāo)字符串的末尾,追加完以后再追加一個(gè)\0
●如果num>源字符串長(zhǎng)度,則只會(huì)將源字符串中\0
之前的內(nèi)容追加到目標(biāo)字符串的末尾**
實(shí)例????文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-756711.html
??我的分享也就到此結(jié)束啦??
要是我的分享也能對(duì)你的學(xué)習(xí)起到幫助,那簡(jiǎn)直是太酷啦!
若有不足,還請(qǐng)大家多多指正,我們一起學(xué)習(xí)交流!
??公主,王子:點(diǎn)贊??→收藏?→關(guān)注??
感謝大家的觀看和支持!祝大家都能得償所愿,天天開(kāi)心?。?!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-756711.html
到了這里,關(guān)于C語(yǔ)言——字符函數(shù)和字符串函數(shù)(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!