邀請注冊推廣賺錢seo深圳優(yōu)化
📝前言:
這篇文章對我最近學(xué)習(xí)的有關(guān)字符串的函數(shù)做一個總結(jié)和整理,主要講解字符函數(shù)和字符串函數(shù)(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用場景和一些注意事項(附上實例)
🎬個人簡介:努力學(xué)習(xí)ing
📋個人專欄:C語言入門基礎(chǔ)
🎀CSDN主頁 愚潤求學(xué)
🌄每日雞湯:生活在自己的光里,不斷吹飲內(nèi)心的火焰
文章目錄
- 一,字符分類函數(shù)
- 1,使用實例(islower)
- 二,字符轉(zhuǎn)換函數(shù)
- 三,函數(shù)strlen
- 1,基本介紹
- 2,使用注意事項
- 四,strcpy和strncpy
- 1,strcpy
- 2,strncpy
- 五,strcat和strncat
- 1,strcat
- 2,strncat
一,字符分類函數(shù)
📋C語言里提供一系列的函數(shù)專門用于字符分類,便于我們**判斷一個字符是屬于什么類型的字符**👇🏻
如islower:
int islower(int c)
islower
就會判斷參數(shù)部分的c是否是小寫字母(字符→ASCII值)
1,使用實例(islower)
●這些函數(shù)的使用方法非常類似,一下對其中的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),因為一次只能判斷一個字符{if (islower(str[i])) //判斷是否為小寫,小寫就加入if語句{str[i] = str[i] - 32; //將小寫轉(zhuǎn)換為大寫}putchar(str[i]); //輸出字符}return 0;
}
輸出結(jié)果👇🏻
二,字符轉(zhuǎn)換函數(shù)
下面介紹兩種可以實現(xiàn)大小寫之間互相轉(zhuǎn)化的函數(shù)👇🏻
1,int tolower(int c);
將大寫字母轉(zhuǎn)換為小寫字母
2,int toupper(int c);
將小寫字母轉(zhuǎn)換為大寫字母
在上一個用islower判斷大小寫后,我們是通過小寫字符-32的形式來轉(zhuǎn)化為大寫字符的,這次我們使用toupper函數(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
用來計算字符串的長度
1,基本介紹
我們來看一下C語言官網(wǎng)對它的介紹👇🏻
●原文:C字符串的長度是由終止空字符決定:C字符串的長度等于字符串開頭和終止字符之間的字符數(shù)(但不包括終止字符本身)
●通俗來講就是:字符串開頭到\0
之前字符的個數(shù)
2,使用注意事項
🔍但是這也造成了strlen的“固執(zhí)”,strlen只有遇到\0
才會停止查找,否則就會一直查找
請看下面的代碼👇🏻
#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;
}
運行結(jié)果👇🏻
?結(jié)果不一樣就是因為strlen在arr2的未知位置才找到了\0
arr1數(shù)組中存放的是:a b c d e \0
程序自動在字符串后面補充了\0
arr2數(shù)組中存放的是:a b c d e
沒有\0
,因此strlen會一直找\0
找到才停止,輸出結(jié)果 33 其實是一個隨機值(剛好strlen在內(nèi)存里找到了\0
)
四,strcpy和strncpy
頭文件:<string.h>
作用:復(fù)制字符串
1,strcpy
我們先來看strcmp
👇🏻
函數(shù)原型:
char* strcpy(char* destination, const char* source);
●對重要的內(nèi)容解讀一下與數(shù)理:
1,原字符串必須以\0
結(jié)尾,函數(shù)復(fù)制完\0
以后就會停止
2,目標(biāo)空間要足夠大,要存放的下所要復(fù)制的字符串
3,目標(biāo)空間必須可修改(比如:字符數(shù)組可以修改,但是,常量字符串就是不能修改的)
實例👇🏻
但是,如果源字符里有\0
,則復(fù)制完\0
就會停止👇🏻
2,strncpy
和strcpy的區(qū)別就是多了一個n→num(復(fù)制的字符的個數(shù))
char* strncpy(char* destination, const char* source, size_t num);
●復(fù)制num個字符從源字符串到目標(biāo)空間
●如果num>源字符串長度,則復(fù)制完源字符串后,目標(biāo)后面追加0,直到num個
👇🏻
可以觀察到:
num的限制就是剛好復(fù)制num個字符,并且沒有更改目標(biāo)空間原來后面的內(nèi)容
五,strcat和strncat
頭文件:<string.h>
作用:連接字符串
1,strcat
?提煉一下:
●源字符串必須以\0
結(jié)尾,函數(shù)追加完\0
以后就會停止
●從目標(biāo)中的終止空字符串開始覆蓋(目標(biāo)字符串也必須以\0
結(jié)尾,因為目標(biāo)字符串的\0
就是開始追加的位置,這個\0
會被覆蓋掉)
●目標(biāo)空間要足夠大(>(目標(biāo)字符串+源字符串)的大小)
●目標(biāo)空間必須可以修改
實例👇🏻
可見,源字符串中間有空字符也不會停止
2,strncat
?區(qū)別:
●從源字符串追加num個字符到目標(biāo)字符串的末尾,追加完以后再追加一個\0
●如果num>源字符串長度,則只會將源字符串中\0
之前的內(nèi)容追加到目標(biāo)字符串的末尾**
實例👇🏻
🌈我的分享也就到此結(jié)束啦🌈
要是我的分享也能對你的學(xué)習(xí)起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學(xué)習(xí)交流!
📢公主,王子:點贊👍→收藏?→關(guān)注🔍
感謝大家的觀看和支持!祝大家都能得償所愿,天天開心!!!