所屬頭文件:<string.h>
0,、獲取字符串長度:int strlen(char *s)int strlen(char *s) 函數(shù)說明:此函數(shù)用于獲取s的長度,,不包括'\0'注:切記最好保證s的尾部是'\0',strlen函數(shù)讀到'\0'會自動停止然后統(tǒng)計(jì)字符數(shù)返回值:字符數(shù) 1,、查找指定的字符:index函數(shù),rindex函數(shù),strchr函數(shù) strrchr(其中index函數(shù)和strchr函數(shù)基本相同,rindex函數(shù)和strchr函數(shù)相同)(1)char *index(const char* s, char c) char *strchr(const char* s, char c)函數(shù)說明:index函數(shù)用于查找字符串s中第一個(gè)出現(xiàn)c字符的地址,,然后將該字符的地址返回.strchr函數(shù)與index相似 返回值:若找到指定到字符則返回該字符的地址,否則返回0 舉例: char s[] = "abcdeabcde"; char *sdest = NULL; sdest = index(s,'d'); printf("sdest: %s\n",sdest); 輸出結(jié)果:sdest: deabcde (2)char *rindex(const char* s, char c) char *strrchr(const char* s, char c) 函數(shù)說明:類似于index函數(shù),,但是他是從字符串開始查找字符c,,并返回從字符串尾部開始第一個(gè)符合條件的字符的地址(strrchr與rindex相似) 返回值:同index一樣 舉例: char s[] = "abcdeabcde"; char *sdest = NULL; sdest = rindex(s,'d'); printf("sdest: %s\n",sdest); 輸出結(jié)果:sdest: de 2、查找滿足條件字符串中任意一個(gè)字符:strpbrk函數(shù)char *strpbrk(const char *s, const char *accept)函數(shù)說明:查找s字符串第一個(gè)符合accept字符串中任意一個(gè)字符的字符的地址 返回值:符合條件的字符的地址 舉例: char s[] = "abcdefgefgbe"; char t[] = "omgf"; char *d = NULL; d = strpbrk(s,t);//應(yīng)該會從s中找到‘f'字符的地址 if(d != 0) { printf("原字符串: %s\n",s); printf("獲得到字符串: %s\n",d); } 輸出結(jié)果: 原字符串: abcdefgefgbe 獲得到字符串: fgefgbe 3,、統(tǒng)計(jì)字符串中連續(xù)包含或不包含指定字符串內(nèi)容到字符數(shù):strspn函數(shù) ,strcspn函數(shù)(1)size_t strspn(const char *s, const char *accept)函數(shù)說明:從s的開頭開始計(jì)算連續(xù)的字符,,這些字符都屬于accept中字符,遇到不是accept中的字符則停止,,并返回字符個(gè)數(shù)n,,即代表s開始處有連續(xù)n個(gè)屬于accept字符串的字符. 返回值:返回s字符串起始位置開始連續(xù)屬于accept字符串的字符個(gè)數(shù) 舉例: char s[] = "abcdefgefgmmmmmbbe"; char t[] = "bcdaefg"; int inumber = 0; inumber = strspn(s,t); printf(" %d\n",inumber); 輸出結(jié)果:10 (2)size_t strcspn(const char *s,const char *reject) 函數(shù)說明:與strspn相反,從s的開頭開始計(jì)算連續(xù)不屬于reject的字符數(shù),,并返回字符個(gè)數(shù)n,即代表s開頭處有n個(gè)不屬于accept字符串的字符,。 返回值:返回s字符串起始位置開始連續(xù)不屬于accept字符串到字符個(gè)數(shù) 舉例: char s[] = "abcdefgefgmqmmmmbbe"; char t[] = "mq"; int inumber = 0; inumber = strcspn(s,t); printf(" %d\n",inumber); 輸出結(jié)果:10 4、查找指定字符串:char *strstr(const char *s, const char *need);函數(shù)說明:從s中找到與need匹配到子字符串,,并將該子字符串的地址返回返回值:匹配的子字符串的起始地址 舉例: char s[] = "abcdefgefgmqmmmmbbe"; char t[] = "fge"; char *score = NULL; score = strstr(s,t); printf(" %s\n",score); 輸出結(jié)果: fgefgmqmmmmbbe 5,、字符串分割:char *strtok(char *s, const char *delim)函數(shù)說明:strtok函數(shù)將s按照delim字符串中的字符分割成一個(gè)個(gè)子字符串,對于字符串s,,當(dāng)遇到delim中到字符,,則將該字符替換成'\0'然后返回'\0'之前的字符串子串。若繼續(xù)分割,,則將第一個(gè)參數(shù)設(shè)置為NULL,程序會從上一次分割結(jié)束的位置('\0'之后)開始繼續(xù)分割,,若已經(jīng)無法分割則返回NULL返回值:分割所得到子字符串的地址.,若無法分割則返回NULL 舉例: char s[] = "abc:bcd:ef bg_op fq:yz_dd"; char t[] = ": _"; char *score = NULL; /*第一次調(diào)用*/ if((score = strtok(s,t)) == NULL) { printf("failed!\n"); return 0; } printf("%s;",score); /*繼續(xù)分割,,將第一個(gè)參數(shù)這是為NULL*/ while((score = strtok(NULL,t))) { printf("%s;",score); } 輸出結(jié)果: abc;bcd;ef;bg;op;fq;yz;dd; 6,、字符串比較:strcmp函數(shù), strncmp函數(shù),strcasecmp函數(shù),strncasecmp函數(shù)(1)int strcmp(const char *s1,const char *s2);函數(shù)說明:s1字符串與s2字符串從開頭開始逐字符比較,先用s1的第一個(gè)字符的ASCII碼的值與s2到第一個(gè)字符值到ASCII碼值相減,,若差值等于0,則繼續(xù)用s1,s2字符串的第二個(gè)字符比較,,若不等于0則返回差值。所有字符比較完后差值依然為0,,但是其中一個(gè)字符串長度較長,,如s2比s1多一個(gè)字符'a',那么返回差值0-'a'的值 返回值:若兩個(gè)字符串完全相同則返回0,,否則返回字符差值 舉例: char s1[] = "abcdefg"; char s2[] = "abcdefgopq"; char s3[] = "abcdefm"; printf("s1與s2比較:%d\n",strcmp(s1,s2)); printf("s1與s3比較:%d\n",strcmp(s1,s3)); return 1; 輸出結(jié)果: s1與s2比較:-111 s1與s3比較:-6 函數(shù)說明:原理與strcmp函數(shù)一樣,,只不過多了一個(gè)參數(shù)來限制比較用于比較的字符的個(gè)數(shù)不能超過n,如果兩個(gè)字符串前n個(gè)字符完全一樣則返回0,相比strcmp,strncmp函數(shù)靈活性更強(qiáng),。 返回值:若兩個(gè)字符串完全相同則返回0,,否則返回字符差值 函數(shù)說明:與strcmp相似,只不過比較的時(shí)候忽略大小寫差異 返回值:在忽略大小寫的情況下,,若兩個(gè)字符串完全相同則返回0,,否則返回字符差值 函數(shù)說明:于strcasecmp函數(shù)相比,多了個(gè)參數(shù)限定比較字符的個(gè)數(shù) 返回值:在忽略大小寫的情況下,,若兩個(gè)字符串完全相同則返回0,,否則返回字符差值 7、字符串復(fù)制:strcpy函數(shù),、strncpy函數(shù),、strdup函數(shù)(1)char *strcpy(char *dest, const char *src)函數(shù)說明:將src字符串到內(nèi)容拷貝到dest指向到字符串中,注:拷貝的長度由src字符串的'\0'空字符的位置決定,,因此使用到時(shí)候要考慮到src末尾是否有空字符,,并且考慮dest字符串的大小,有可能dest無法容納src導(dǎo)致溢出 返回值:dest字符串的起始位置 舉例: char dest[50]; char src[] = "adfdasfa"; printf("%s",strcpy(dest,src)); 輸出結(jié)果: adfdasfa (2)char *strncpy(char *dest, const char *src, size_t n) 函數(shù)說明:與strcpy用法類似,,將src最多前n個(gè)字符拷貝到dest,如果src長度小于n則到'\0'為止,,相比strcpy,strncpy函數(shù)安全性更高,,使用更靈活 返回值:dest字符串的起始位置 (3)char *strdup(char *src) 函數(shù)說明:會調(diào)用malloc函數(shù)動態(tài)分配一塊大小與src一樣的內(nèi)存,,然后將src的內(nèi)容拷貝到該塊內(nèi)存中,并將內(nèi)存的起始地址返回,,這意味著如果我們不再需要這個(gè)字符串的副本,,我們最好使用free()將它釋放。 返回值:復(fù)制成功后的字符串的地址,,若失敗則返回NULL |
|