C語(yǔ)言常用庫(kù)函數(shù)的使用及模擬實(shí)現(xiàn)詳解例舉
經(jīng)歷了C語(yǔ)言基礎(chǔ)篇的學(xué)習(xí),讓我們來(lái)簡(jiǎn)單了解幾個(gè)C語(yǔ)言的庫(kù)函數(shù)!
1.strlen
字符串已經(jīng) '\0' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 '\0' 前面出現(xiàn)的字符個(gè)數(shù)(不包 含 '\0' )。
函數(shù)的模擬實(shí)現(xiàn)
1.計(jì)數(shù)法
int my_strlen(dest)
{
int count=0;
while(dest)//當(dāng)dest等于'\0'時(shí)停止循環(huán)
{
count++;
dest++;
}
return count;
}2.遞歸法
int my_strlen(char* dest)
{
int count=0;
if(*dest!='0')
{
dest++;
count++;
return my_strlen(dest,count)
}
else
return count;
}3.指針減指針
int my_strlen(char* dest)
{
char* arr=dest;//定義一個(gè)新指針指向dest
while(*arr)//直到arr指向'\0'
{
arr++;
}
return (arr)-(dest);//指針相減代表兩個(gè)指針之間的元素個(gè)數(shù)
}2.strcpy
char* strcpy ( char * destination , const char * source )
會(huì)將源字符串中的 '\0' 拷貝到目標(biāo)空間。
目標(biāo)空間必須足夠大,并且可變以確保能存放源字符串。
函數(shù)的模擬實(shí)現(xiàn)
char* my_strcpy(char* dest, const char* str)
{
char* arr1 = dest;
while ((*dest++ = *str++)!='\0')
{
;
}
return arr1;
}
int main()
{
char arr1[] = "***************";
char arr2[] = "hello word";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}3.strcmp
int strcmp ( const char * str1, const char * str2 );
第一個(gè)字符串大于第二個(gè)字符串,則返回大于0的數(shù)字
第一個(gè)字符串等于第二個(gè)字符串,則返回0
第一個(gè)字符串小于第二個(gè)字符串,則返回小于0的數(shù)字
函數(shù)的模擬實(shí)現(xiàn)
int my_strcmp(char* arr1,char* arr2)
{
while(*arr1 == *arr2)
{
if (*arr1 == '\0' && *arr2 == '\0')
{
return 0;
}
else
{
arr1++; arr2++;
}
}if (*arr1 > *arr2)
{
return 1;
}
else if (*arr1 < *arr2)
{
return -1;
}
}4.strcat
char * strcat ( char * destination, const char * source );
函數(shù)的模擬實(shí)現(xiàn)
char* my_strcat(char* dest, char* str)
{
char* ret = dest;
while (*dest)
{
dest++;
}
while (*dest++=*str++)
{
;
}
return ret;
}
int main()
{
char arr1[50] = "hello";
char arr2[] = "word";
char* count=my_strcat(arr1, arr2);
printf("%s", count);
return 0;
}5.strstr
char * strstr ( const char *str1, const char * str2);
函數(shù)的模擬實(shí)現(xiàn)
char* my_strstr(char* dest, char* str)
{
char* arr1 = str;
char* cur = dest;
while (*cur)
{
str = arr1;
dest = cur;
if (*dest != *str)
{
dest++;
str++;
}
else if (*dest == *str)
{
while (*dest == *str)
{
dest++; str++;
}if (*str == '\0')
{
return cur;
}
}
cur++;
}return NULL;
}
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* ret=my_strstr(arr1, arr2);
if (NULL == ret)
{
printf("找不到子串\n");
}
else
{
printf("%s\n", ret);
}
return 0;
}6.strtok
char * strtok ( char * str, const char * sep );
strtok函數(shù)的第一個(gè)參數(shù)不為 NULL ,函數(shù)將找到str中第一個(gè)標(biāo)記,strtok函數(shù)將保存它在字符串中的位置。
strtok函數(shù)的第一個(gè)參數(shù)為 NULL ,函數(shù)將在同一個(gè)字符串中被保存的位置開始,查找下一個(gè)標(biāo)記
int main()
{
char buff[] = "www.aaabbbccc@qq.com";
char buf[20] = { 0 };
strcpy(buf, buff);
char* sep=".@";
char* str = NULL;
for (str = strtok(buf, sep); str != NULL; str = strtok(NULL, sep))
{//NULL是從保存好的位置開始往后找
printf("%s\n", str);
}
return 0;
}7.字符分類函數(shù)
| iscntrl | 任何控制字符 |
| isspace | 空白字符:空格‘ ’,換頁(yè)‘\f’,換行'\n',回車‘\r’,制表符'\t'或者垂直制表符'\v' |
| isdigit | 十進(jìn)制數(shù)字 0~9 |
| isxdigit | 十六進(jìn)制數(shù)字,包括所有十進(jìn)制數(shù)字,小寫字母a~f,大寫字母A~F |
| islower | 小寫字母a~z |
| isupper | 大寫字母A~Z |
| isalpha | 字母a~z或A~Z |
| isalnum | 字母或者數(shù)字,a~z,A~Z,0~9 |
| ispunct | 標(biāo)點(diǎn)符號(hào),任何不屬于數(shù)字或者字母的圖形字符(可打?。?/span> |
| isgraph | 任何圖形字符 |
| isprint | 任何可打印字符,包括圖形字符和空白字符 |
8.memcpy&memmove
void * memcpy ( void * destination , const void * source , size_t num )
函數(shù)模擬實(shí)現(xiàn)
void* my_memmove(void* dest,void* str , size_t count)
{
void* ch = dest;
if (dest > str)
{
while (count--)
{
*((char*)dest + count) = *((char*)str + count);
}
}
else
{
while (count--)
{
*(char*)dest = *(char*)str;
dest=(char*)dest+1;
str=(char*)str+1;
}
}
}
int main()
{
int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
my_memmove(arr1+2, arr1 , 20);
int sz = sizeof(arr1) / sizeof(arr1[0]);
for (int i = 0; i < sz; i++)
{
printf("%d", arr1[i]);
}
return 0;
}9.memcmp
int memcmp ( const void * ptr1 , const void * ptr2 , size_t num );
函數(shù)模擬實(shí)現(xiàn)
void* my_memcmp(char* arr, char* arr1, int count)
{
while (count--)
{
if (*(char*)arr > *(char*)arr1)
{
return 1;
}
else if ((*(char*)arr < *(char*)arr1))
{
return -1;
}
arr++; arr1++;
} return 0;
}
int main()
{
int arr[] = { 1,2,3,4,5 };
int arr1[] = { 1,2,3,4,4 };
int ret=my_memcmp(arr, arr1, 20);
printf("%d", ret);
return 0;
}到此這篇關(guān)于C語(yǔ)言常用庫(kù)函數(shù)的使用及模擬實(shí)現(xiàn)詳解例舉的文章就介紹到這了,更多相關(guān)C語(yǔ)言 庫(kù)函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言庫(kù)函數(shù)qsort的使用詳解
- C語(yǔ)言 超詳細(xì)講解庫(kù)函數(shù)
- C語(yǔ)言庫(kù)函數(shù)中qsort()的用法
- C語(yǔ)言strcpy庫(kù)函數(shù)詳解
- 實(shí)現(xiàn)C語(yǔ)言常用字符串庫(kù)函數(shù)
- C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù)(推薦)
- 一篇文章帶你實(shí)現(xiàn)C語(yǔ)言中常用庫(kù)函數(shù)的模擬
- 一篇文章教你自己動(dòng)手實(shí)現(xiàn)C語(yǔ)言庫(kù)函數(shù)
- C語(yǔ)言模擬實(shí)現(xiàn)庫(kù)函數(shù)詳解
相關(guān)文章
C語(yǔ)言中設(shè)置進(jìn)程優(yōu)先順序的方法
這篇文章主要介紹了C語(yǔ)言中設(shè)置進(jìn)程優(yōu)先順序的方法,包括setpriority()函數(shù)和getpriority()函數(shù)以及nice()函數(shù),需要的朋友可以參考下2015-08-08
C++11 中的std::function和std::bind詳解
這篇文章主要介紹了C++ 11 std::function和std::bind,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-10-10
C語(yǔ)言實(shí)現(xiàn)掃雷算法簡(jiǎn)易版
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷算法簡(jiǎn)易版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C++中vector容器的常用操作方法實(shí)例總結(jié)
vector容器一般被用作創(chuàng)建動(dòng)態(tài)數(shù)組,動(dòng)態(tài)數(shù)組就像Python中的list結(jié)構(gòu)一樣,可以比普通數(shù)組擁有更豐富操作方法,下面就為大家整理了一些最常用的操作:2016-05-05
C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼
猜數(shù)字小游戲是我們小時(shí)候喜歡我們一個(gè)經(jīng)典小游戲。這篇文章將利用C語(yǔ)言中的循環(huán)語(yǔ)句、分支語(yǔ)句和函數(shù)實(shí)現(xiàn)這一游戲,需要的可以參考一下2022-10-10

