介紹完字符串整體操作函數,就該到字符串查詢函數和字符串轉換函數了,至於一些字符串轉換函數,如atoi(),atof(),strtod(),strtol(),tolower(),toupper()等,以後有時間再整理整理。
字符串查詢函數:
strchr:匹配字符串中首次出現的指定字符
原型:char* strchr(const *s, int c)功能:用來找出參數s字符串中第一個出現參數c的地址,然後將該字符出現的地址返回返回值:如果找到指定的字符,則返回該字符所在地址,否則返回0。
說明:數組str中為"abcabc",使用strchr()查找'c'字符首次出現的位置,返回其首次出現的地址,列印輸出"cabc";第11行,將查找到地址的值修改為字符'*',原數組列印輸出變為"ab*abc"。
strchr()遇到'\0'會停止,例子:
再來做一個簡單的拓展,寫個小函數,實現功能呢就是把給定字符串中某個字符出現的所有位置都用另外一個字替換,如下例子,將"abcabc"中的'c'替換為'@':
memchr:字符搜索
原型:void* memchr(const void *s, int c, size_t n);功能:從buf所指內存區域的前n個字節查找字符c說明:當第一次遇到字符c時停止查找。如果成功,返回指向字符c的指針;否則返回NULL注意:與strchr不同,它不會遇到'\0'而結束
strstr:字符串匹配,在一個字符串中查找指定的字符串
原型:char* strstr(const char *haystack, const char *needle)功能:strstr()會從字符串 haystack中搜尋字符串needle,並將第一次出現的地址返回返回值:返回指定字符串第一次出現的地址,否則返回0
同樣,strstr()遇到'\0'會停止,如:
字符串轉換函數
strtok:字符串分割函數
原型:char *strtok(char *s, const char *delim);功能:分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串說明:strtok()用來將字符串分割成一個個片段。參數s指向欲分割的字符串,參數delim則為分割字符串中包含的所有字符。當strtok()在參數s的字符串中發現參數delim中包涵的分割字符時,則會將該字符改為\0 字符。在第一次調用時,strtok()必需給予參數s字符串,往後的調用則將參數s設置成NULL。每次調用成功則返回指向被分割出片段的指針,如無從分割則返回NULL。
strset:字符串設定函數,遇到'\0'結束。
原型:char *strset(char *s, char c);功能:把字符串s中的所有字符都設置成字符c說明:返回指向s的指針
memset:空間設定函數,與strset不同,遇到'\0'不會結束,需要給定所要設置的空間大小。
原型:void *memset(void *s, int ch, size_t n);功能:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法說明:將s所指向的某一塊內存中的每個字節的內容全部設置為ch指定的ASCII值, 塊的大小由第三個參數指定,這個函數通常為新申請的內存做初始化工作, 其返回值為指向S的指針
還有一些比較常用的函數,如字符串轉換函數,像atoi,atof,atol等,都是比較簡單的,有時間了整理一下,既然說到這裡,順便提一句,atof()比較特殊,在使用時需要注意下,不要忘記包含頭文件stdlib.h。
寫代碼的時候最好不要忽略警告,有時候忽略警告會有意想不到的效果,如上面例子當中使用atof時,提示:warning C4013: 「atof」未定義。需要包含頭文件stdlib.h,即使不包含,也有警告但不會報錯,只是,若不包含這個頭文件,這裡則是一個隱式申明,隱式申明默認返回類型是int型,float型數據按照int型處理就出問題了。
這是一個坑啊。。。