一、 字符處理函數
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就返回一個負值。