C/C++中經常使用的字符串處理函數和內存字符串函數


一、            字符處理函數

1.        字符處理函數:<ctype.h>

int isdigit(int ch)   ;//是否為數字,即ch是否是0-9中的字符
int isxdigit(int ch)   ;//是否為十六進制數字,即ch是否是0-9  a-z A-Z 中的字符
int isalpha(int ch)  ;//是否為字母
int isalnum(int ch)  ;//是否為字母或數字
int islower(int ch)  ;//是否為小寫字母
int isupper(int ch)  ;//是否為大寫字母
int tolower(int ch)  ;//轉換為小寫字母
int toupper(int ch)  ;//轉換為大寫字母

2.        字符串轉換函數:<stdlib.h>

字符轉換為數字:

double atof(char  *str) ; //將字符串str轉換為double型數字
int    atoi (char  *str) ; //將字符串str轉換為int 型數字
long   atol(char  *str) ; //將字符串str轉換為long int 型數字

數字轉換為字符:

//將int型數字digit按radix進制轉換成字符串destStr
char * itoa (int digit, char *destStr, int radix) ;
//同理將long型數字轉換成字符串
char * ltoa (long digit, char *destStr, int radix) ;
//同理將unsignedlong型數字轉換成字符串
char * ultoa (long digit, char *destStr,int radix) ;

【以上庫函數能夠用於進制的轉換】

類似函數還有:

double strtod(char *, char **) ;
long strtol(char *, char **, int) ;
unsigned long strtoul(char *, char **, int) ;

3.        字符串操作函數:<string.h>

char * strcpy (char *s1, char *s2) ; //將字符串s2拷貝到數組s1中。

char * strncpy(char *s1,char *s2) ; //將字符串s2的最多n個字符拷貝到數組s1中 char * strcat (char *s1, char * s2) ; //將字符串s2連接在字符串s1尾部 char * strncat(char *s1, char *s2, size_tn) ; //將字符串s2中最多n個字符連接在s1之后

【注意:以上操作都要求目標字符數組有足夠的存儲空間】

 

4.        符串比較函數:<string.h>

//比較字符串s1,s2.假設s1等於小於或大於s2。分別返回0。負值,正值
int strcmp(char *s1, char *s2 ) ;
int stricmp(char *s1, char *s2) ;//不區分大寫和小寫地比較兩字符串
int strncmp(char *s1, char *s2, size_t n)  ;//比較兩字符串的至多n個字符

5.        字符串查找函數:<string.h>

//在字符串str中查找字符ch第一次出現的位置,假設找到了,就返回str中ch的指針,否則返回NULL
char *strchr(char*str, int ch) ;
//查找字符串str中字符ch的最后一次出現的位置(即:從后往前查找)
char*strrchr(char *str, int ch) ;
//查找字符串str1中第一次出現字符串str2的位置
char *strstr(char*str1, char *str2) ;
//查找字符串str2中隨意字符在字符串str1中首次出現的位置。
char*strpbrk(char *str1, char *str2)

其他函數:

char *strrev(char * ) ; //字符串逆序函數
size_t strlen(char * str) ;//測字符串str的長度

注意:

strncpy( ) , strncat( ) , strncmp( ) ,這些函數僅僅能對兩個不同的字符串操作,不能對同一字符串的不同部分操作。假設須要這么做,能夠使用內存函數。

若把目標字符串初始置空,strncat()能夠完畢非常多功能的操作。能夠替代strncpy( )的功能,還能夠提取子串等。

 

二、            內存函數

內存函數直接對內存操作,不僅能夠處理字符串,還能夠處理不論什么類型的數組、結構等。

在標准C中,這些函數被覺得是字符串函數的一部分,是在頭文件string.h中聲明的。

 

void * memcpy(void *dest, const void *src, size_t n)  ;
//從src地址處復制n個字節到dest , 並返回地址dest的值
 
void * memmove(void *dest, const void *src, size_t n)  ;
//其功能與上個函數同樣。差別在於:memmove函數在源內存區域和目標內存區域重疊的情況下也能正確運行操作。
 
void * memchr(const void *ptr, int val, size_t len) ;
/*在地址ptr后的前len個字符中搜索val值的第一次出現。

假設找到val。它返回一個指向包括val值的第一個字符的指針,否則返回一個null字符。(每一個字符依據表達式(unsigned char)c == (unsigned char)val 比較)*/ void * memset(void * ptr, int val, size_tlen) ; //把val拷貝到從ptr開始的len個字符中,ptr所指定的字符被覺得是unsignedchar類型 int memcmp(const void * ptr1, const void * ptr2, size_t len) ; //把ptr1的前len個字符與ptr2的前len個字符進行比較。假設第一個字符串按字典順序小於第二字字符串,memcmp就返回一個負值。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM