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就返回一個負值。