玖
***字符串處理的庫函數***
**字符處理函數:<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)? ;//轉換為大寫字母
**字符串轉換函數:<stdlib.h>**
1,字符轉換為數字:
(最好是符合要求的純數字字符串,若數字與字母混搭,則待數字必須在前面)
double?atof(char? *str) ; //將字符串str轉換為double型數字
int????atoi (char? *str) ; //將字符串str轉換為int 型數字
long???atol(char? *str) ; //將字符串str轉換為long int 型數字
2,數字轉換為字符:
char * itoa (int digit, char *destStr, intradix) ; //將int型數字digit按radix進制轉換成字符串destStr
char * ltoa (long digit, char *destStr, intradix) ; //同理將long型數字轉換成字符串
char * ultoa (long digit, char *destStr,int radix) ; //同理將unsignedlong型數字轉換成字符串
【以上庫函數可以用于進制的轉換】
類似函數還有:
double strtod(char *, char **) ;
long?strtol(char *, char **, int) ;
unsigned long strtoul(char *, char **, int) ;?
**★字符串操作函數:<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之后
【注意:以上操作都要求目標字符數組有足夠的存儲空間】
**字符串比較函數:<string.h>**
int?strcmp(char *s1, char *s2 )? ;//比較字符串s1,s2.如果s1等于小于或大于s2,分別返回0,負值,正值
int?stricmp(char *s1, char *s2)? ;//不區分大小寫地比較兩字符串
int?strncmp(char *s1, char *s2, size_t?n)? ;//比較兩字符串的至多n個字符
**字符串查找函數:<string.h>**
char?*strchr(char *str, int ch) ;//在字符串str中查找字符ch第一次出現的位置,如果找到了,就返回str中ch的指針,否則返回NULL
char?*strrchr(char *str, int ch) ;//查找字符串str中字符ch的最后一次出現的位置(即:從后往前查找)
char?*strstr(char *str1, char *str2) ;//查找字符串str1中第一次出現字符串str2的位置
char?*strpbrk(char *str2, char *str2) ;//查找字符串str2中任意字符在字符串str1中首次出現的位置。
**其它函數:**
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就返回一個負值。
**【后記】我的C書單列表**
《全國計算機等級考試二級C語言》
《C語言大學教程》
《C和指針》
《C語言深度剖析》
《你必須知道的495個C語言問題》
《C專家編程》
《C陷阱與缺陷》(如果上面的書你仔細研讀過的話,那么這本書沒什么意義,不推薦)
《高質量C/C++編程指南》
《C語言參考手冊》(當做字典用,初學者不推薦)
《C標準庫》(不推薦)