廈門(mén)國(guó)外網(wǎng)站建設(shè)公司廣州競(jìng)價(jià)托管代運(yùn)營(yíng)
Hello大家好!很高興我們又見(jiàn)面了!
給生活添點(diǎn)passion,開(kāi)始今天的編程之路!
?
目錄
1、字符分類函數(shù)
2、字符轉(zhuǎn)換函數(shù)
3、字符串函數(shù)
1、 strcpy
2、 strcat
3、 strcmp
4、strlen(s)
5、strstr(s1, s2)
6、?strtok(s1, s2)
?
1、字符分類函數(shù)
字符分類函數(shù) 如果符合就返回真
iscntrl 任何控制字符
isspace 空白字符
isdigit 十進(jìn)制0到9
isxdigit 十六進(jìn)制
islower 小寫(xiě)字母
isupper 大寫(xiě)字母
isalpha 字母
isalnum 字母或者數(shù)字
ispunct 標(biāo)點(diǎn)符號(hào)
isgraph 任何圖形字符
isprint 任何可打印字符
以上是字符分類函數(shù)的作用
2、字符轉(zhuǎn)換函數(shù)
toupper() 函數(shù)將小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母。
tolower()函數(shù)將給定的字符轉(zhuǎn)換成小寫(xiě)字母。
3、字符串函數(shù)
在C語(yǔ)言中給定的字符串函數(shù)很多:
1. strcpy(s1, s2):復(fù)制字符串,將s2復(fù)制到s1。
2. strncpy(s1, s2, n):復(fù)制字符串,將s2的前n個(gè)字符復(fù)制到s1。
3. strcat(s1, s2):連接字符串,將s2連接到s1的末尾。
4. strncat(s1, s2, n):連接字符串,將s2的前n個(gè)字符連接到s1的末尾。
5. strcmp(s1, s2):比較字符串,比較s1和s2,返回值表示s1和s2的字典順序,大于0則s1在前。
6. strncmp(s1, s2, n):比較字符串,比較s1和s2的前n個(gè)字符。
7. strlen(s):計(jì)算字符串長(zhǎng)度,返回s的長(zhǎng)度,不包括結(jié)尾的空字符。
8. strchr(s, c):查找字符,返回指向s中第一次出現(xiàn)c的指針。
9. strrchr(s, c):查找字符,返回指向s中最后一次出現(xiàn)c的指針。
10. strstr(s1, s2):查找子串,返回指向s1中第一次出現(xiàn)s2的指針。
11. strtok(s1, s2):分割字符串,使用s2中的分隔符分割s1。
12. strtok_r(s1, s2, p):分割字符串,線程安全的版本。
13. strdup(s):復(fù)制字符串,動(dòng)態(tài)分配內(nèi)存并復(fù)制s。
14. strndup(s, n):復(fù)制字符串,動(dòng)態(tài)分配內(nèi)存并復(fù)制s的前n個(gè)字符。
15. strcoll(s1, s2):比較字符串,使用當(dāng)前區(qū)域設(shè)置比較s1和s2。
16. strxfrm(s1, s2):轉(zhuǎn)換字符串,轉(zhuǎn)換s2以便使用strcoll比較。
這些字符串函數(shù)都包含在頭文件string.h中
這里我們簡(jiǎn)單介紹幾個(gè)常用的函數(shù),并對(duì)他們進(jìn)行模擬實(shí)現(xiàn):
1、 strcpy
復(fù)制字符串,將s2復(fù)制到s1。
函數(shù)原型:
使用:
#include<stdio.h>
#include<stdio.h>
int main()
{char a[20] = "ADD";char b[20] = {0};strcpy(b,a);printf("%s",b);return 0;
}
模擬實(shí)現(xiàn):
#include<stdio.h>
void My_strcpy(char *a,char *b)
{int i = 0;int* c = b;while (a[i] != '\0'){*(b+i) = *(a+i);i++;}}
int main()
{char a[20] = "asdasd";char b[20] = {0};My_strcpy(a,b);printf("%s",b);return 0;
}
2、 strcat
連接字符串,將s2連接到s1的末尾。
函數(shù)原型:
使用:
#include<stdio.h>
#include<stdio.h>
int main()
{char a[20] = "GET SOME";char b[20] = " PASSION";strcat(a,b);printf("%s",a);return 0;
}
模擬實(shí)現(xiàn):
#include<stdio.h>
void My_strcat( char *a,const char *b)
{int i = 0;while (*a!='\0'){a++;}while (*a = *b){a++;b++;}}
int main()
{char a[20] = "ADD";char b[20] = "PASSION";My_strcat(a,b);printf("%s",a);return 0;
}
3、 strcmp
比較字符串,比較s1和s2,返回值表示s1和s2的字典順序,大于0則s1在前。
使用:
#include<stdio.h>
#include<stdio.h>
int main()
{char a[20] = "GET SOME";char b[20] = " PASSION";if (strcmp(a, b) > 0){printf("%s", a);}return 0;
}
模擬實(shí)現(xiàn):
#include<stdio.h>
int My_strcmp(const char *a,const char *b)
{int i = 0;int* c = b;while (*a==*b){if (*a == '\0'){return 0;}a++;b++;}return *a - *b;
}
int main()
{char a[20] = "asdasd";char b[20] = "asa";int ret=My_strcmp(a,b);printf("%d",ret);return 0;
}
4、strlen(s)
計(jì)算字符串長(zhǎng)度,返回s的長(zhǎng)度,不包括結(jié)尾的空字符。
使用:前面已經(jīng)多次使用了,這里不再舉例。
模擬實(shí)現(xiàn):
#include<stdio.h>
int My_strlen(char *arr)
{int i = 0;int len = 0;for (i = 0;arr[i] != '\0';i++){len++;}return len;
}
int main()
{char a[]="asdasd";int len = My_strlen(a);printf("%d",len);return 0;
}
5、strstr(s1, s2)
查找子串,返回指向s1中第一次出現(xiàn)s2的指針。
使用:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{char a[20] = "PASSION";char b[20] = "SS";char* c = strstr(a, b);printf("%s",c);return 0;
}
模擬實(shí)現(xiàn):
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
char *Mystrstr(const char a[], char* p)
{char* str = (char*)a;char* i=a;char* j = p;if (!*p){return a;}while (*str){i = str;j = (char*)p;while (*i && *j && (*i == *j)){i++;j++;}if (!*j){return str;}str++;}return (NULL);}
int main()
{char a[20] = "asdfghjkl";char* ret = Mystrstr(a,"dfg");printf("%s",ret);return 0;
}
6、?strtok(s1, s2)
分割字符串,使用s2中的分隔符分割s1。
使用:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>int main()
{char str[100] = "- This, a sample string.";char* pch = strtok(str, " ,.-");//將地址保存到遇到停止符之前,打印到遇到下一個(gè)停止符的時(shí)候printf("%s\n",pch);//pch = strtok(NULL, " ,.-");//第二次使用這個(gè)函數(shù)就將第一個(gè)參數(shù)換位NULLreturn 0;
}
????????這個(gè)函數(shù)有點(diǎn)復(fù)雜,就不模擬實(shí)現(xiàn)了hhh~
????????今天的內(nèi)容就分享到這,歡迎訂閱我們的專欄:編程之路,獲取更多高質(zhì)量?jī)?nèi)容!
?