摘要:作用字符串拷貝原型使用格式字符數(shù)組名,字符數(shù)組名使用該函數(shù)有兩個參數(shù),右邊拷貝到左邊返回值為字符串的首地址字符串拷貝到字符串輸出結(jié)果注意此函數(shù)是用來判斷是否結(jié)束的,所以只能拷貝帶有的字符串。
目錄
?
作用:計算字符串長度
原型:
size_t strlen ( const char * str );
使用格式:
? ? ? ? ? ? ? ? ?strlen(字符數(shù)組名)?
使用:傳入一個字符串或字符串首元素地址,返回/0前字符個數(shù)。
strlen("abc");//或char aa[5]="abc"strlen(aa);
輸出結(jié)果:
注意:只能計算帶有“/0”的字符串,
? ? ? ? ? ?由于返回值類型為“size_t”類型,
? ? ? ? ? ?所以 例如:
if(strlen("abc")-strlen("abcdefg")>0)
? ? ? ? ? ?時會出現(xiàn)問題,
? ? ? ? ? ?“size_t”是由“unsigend int”重命名得來。
作用:字符串拷貝
原型:
char*strcpy(char* destination,const char* source);
使用格式: strcpy(字符數(shù)組名1,字符數(shù)組名2)
使用:該函數(shù)有兩個參數(shù),右邊拷貝到左邊————返回值為字符串1的首地址
int main(){ char a[] = { "##############" }; char b[] = { "abc" }; puts(a); strcpy(a, b);//b字符串拷貝到a字符串 puts(a);}
輸出結(jié)果:
注意:
1.此函數(shù)是用/0來判斷是否結(jié)束的,所以只能拷貝帶有/0的字符串。
int main(){ char a[] = { "##############" }; char b[] = { "a","b","c"};//這種是不帶/0的寫法,編譯器雖然不會報錯但是也不會出結(jié)果的 puts(a); strcpy(a, b);//b字符串拷貝到a字符串 puts(a);}
2.左邊的字符串要大于右面的字符串,也就是上面a字符串要大于b字符串。
3.左邊的字符串一定是可以修改的,也就是上面a字符串是可修改的。
作用:追加字符串。
原型:
char*strcat(char*strDestination,const char*strSource)
使用格式: strcat(字符數(shù)組名1,字符數(shù)組名2)
使用:該函數(shù)有兩個參數(shù),?右邊的字符串追加到左邊————返回值是“字符串1”的首地址
#include #include int main(){ char aa[10] = { "abc" }; strcat(aa, "def"); puts(aa);//最后輸出abcdef}
注意:被追加的字符串(左邊的第一個參數(shù))一定要預(yù)留空間,預(yù)留的空間要大于追加后的字符? ? ? ? ? ? ? ?串。
? ? ? ? ? ?此函數(shù)的兩個參數(shù)都要有"/0",沒有"/0"是會報錯的。
作用:比較字符串,比較的是內(nèi)容,不是長度。
原型:
int strcmp(const char *string1,const char *string2)
使用方式:strcmp(字符數(shù)組名1,字符數(shù)組名2)
使用:?
? ? ? ? ? ?簡單說就是傳入兩個字符串的地址,
? ? ? ? ? ?兩個字符串完全相等返回0,
? ? ? ? ?? 不相等返回>0的數(shù)或<0的數(shù)
? ? ? ? ? ?<0的情況:
? ? ? ? ? ? >0的情況?:
?注意:此函數(shù)返回的值與字符串的大小,所占內(nèi)存無關(guān),只與第一對不同的字符串和字符串是否? ? ? ? ? ? ? ? 相等有關(guān)。
? ? ? ? ? ? 只能用來比較帶有/0 的字符串。
作用:拷貝固定長度的字符串
原型:
char *strncpy( char *strDest, const char *strSource, size_t count );
使用方式:strncpy(字符數(shù)組名1,字符數(shù)組名2,無符號整形)?
使用:此函數(shù)有三個參數(shù),
? ? ? ? ? ?意思是,把strSurce中的count個字符拷貝到strDest?
下面是參數(shù)對應(yīng)的位置
#include #includeint main(){ char a[] = "abcdefg"; char b[] = "#######"; strncpy(a, b, 3);//表示,把b中的3個字符串拷貝到a中 puts(a);}
? 注意:第三個參數(shù)最好不要大于第二個字符串的元素個數(shù),如果大于,會補‘/0’。
? ? ? ? ? ? ?該函數(shù)會返回第一個參數(shù)的地址。
作用:追加固定長度的字符串
原型:
char *strncat( char *strDest, const char *strSource, size_t count );
使用方式:strncat(字符數(shù)組名1,字符數(shù)組名2,無符號整形)
使用:
? ? ? ? 下面我就用紅字代替對應(yīng)的參數(shù)。
?把? “b字符串”? 中的前? “參數(shù)3”? 個字符串追加到? “a字符串”? 后。
例:
#include #includeint main(){ char aa[10] = "abc"; char bb[10] = "######"; strncat(aa, bb, 3);//把bb中的前三個字符追加到aa后 puts(aa);}
?最后輸出“abc###”。
注意:該函數(shù)追加后會自動補"/0",所以要保證
? ? ? ? ? ?{“a字符串”?空間大于? “a字符串”? ?加? ?“追加字符個數(shù)”+1}
? ? ? ? ? ?后面這個1是"/0"的空間
? ? ? ? ? 如果? “參數(shù)3”? ?>? ?“b字符串”? 只會追加? ?“b字符串”? ?加一個? “/0”
作用:比較指定字符個數(shù)的字符串
原型:
int strncmp( const char *string1, const char *string2, size_t count );
使用方式:strncmp(字符數(shù)組名1,字符數(shù)組名2,無符號整形)?
使用:
? ? ? ? ? ?下面用紅字代替對應(yīng)參數(shù)。
?
?把? “參數(shù)2”? 中的前 “參數(shù)3”? 個字符與? “參數(shù)1”? 中的前“參數(shù)3”個字符比較
比較方式與strcmp是一樣的只是加了個長度的限制。
作用:查找字符串
原型:
char *strstr( const char *string, const char *strCharSet );
?使用方式:
? ? ? ? ? ? ? ? ? ?strstr(字符數(shù)組名1,字符數(shù)組名2)
使用:
?在? “字符串1”? 中找? “字符串2”? 在? “字符串1”? 中第一次出現(xiàn)的位置
并返回第一次出現(xiàn)位置的首地址,如果找不到返回空指針。
找到:
#include#include int main(){ char aa[] = "aa bb cc bb"; char bb[] = "bb"; char* c = strstr(aa, bb);//在aa中找bb在aa中第一次出現(xiàn)的位置 if (c == NULL) { printf("找不到/n");//找不到會返回空指針 } else { printf("找到了/n"); puts(c);//找到返回bb在aa中第一次出現(xiàn)位置的地址 }}
找不到:
#include#include int main(){ char aa[] = "aa bb cc bb"; char bb[] = "ee"; char* c = strstr(aa, bb);//在aa中找bb在aa中第一次出現(xiàn)的位置 if (c == NULL) { printf("找不到/n");//找不到會返回空指針 } else { printf("找到了/n"); puts(c);//找到返回bb在aa中第一次出現(xiàn)位置的地址 }}
作用:切割字符串
原型:
char *strtok( char *strToken, const char *strDelimit );
使用方式:
? ? ? ? ? ? ? ? ? ?strtok(字符數(shù)組名1,字符數(shù)組名2)
使用:
“參數(shù)1”? ?處 傳 被分割的字符串?
“參數(shù)2”? ?處 傳 分割符(其實就是字符)
分割方式:
在 "參數(shù)1"? 中首次遇到? ?"參數(shù)2"? 中的元素時
把? “參數(shù)1” 中該元素替換為‘/0’
#include#includeint main(){ char a[] = "abc.def"; char b[] = "."; puts(strtok(a, b));//把字符串a(chǎn)中的“.”替換成"/0"并返回a字符串中a元素的地址 }
分割成多段?需要多次調(diào)用
每次調(diào)用后會保存此次更改"/0"后一個元素的地址
下一次調(diào)用時? ?“參數(shù)1”? ?需要傳空指針(NULL)才能繼續(xù)切割
#include#includeint main(){ char a[] = "aaa.bbb.ccc";//被分割的字符串 char b[] = ".";//分割符 printf("%s/n", strtok(a, b));//返回a字符串中第一個a的地址 printf("%s/n", strtok(NULL, b));//此時該函式已經(jīng)保存了上一次調(diào)用a字符串中第一個b的地址 //并把bbb后的“.”改為“/0” printf("%s/n", strtok(NULL, b));//此時并沒有找到b字符串中元素直接返回此次調(diào)用起始地址 printf("%s/n", strtok(NULL, b));//這時字符串中已經(jīng)不存在更多標記返回空指針(NULL)}
返回值是此函數(shù)此次切割字符串的首地址
注意:此函數(shù)會改變原字符串所以一般用拷貝后的臨時數(shù)據(jù)。
嗯,這次這strtok寫的可能有些問題,然后還請大佬們指正
以上就是本次的分享,歡迎大家評論,指出錯誤或更好的方法。
? ? ?? ??
??
?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/122425.html
摘要:語言在設(shè)計中考慮了函數(shù)的高效性和易用性兩個原則。在語言中,最常見的當屬函數(shù)了。以上就是一個函數(shù),它被稱為語言的入口函數(shù),或者主函數(shù)。例如和都是函數(shù)名。形式參數(shù)當函數(shù)調(diào)用完成之后就自動銷毀了。 ...
摘要:局部變量的作用域是變量所在的局部范圍。生命周期變量的生命周期變量的創(chuàng)建和銷毀之間的時間段局部變量的生命周期進入作用域生命周期開始,出作用域生命周期結(jié)束。 前言: 就在前幾天,C語言入門到進階部分的專欄——《維生素C語言》終于完成了。全文共計十八個章節(jié)并附帶三張筆試練習篇,美中不足的是,第...
摘要:系統(tǒng)調(diào)用和高級編程語言的移植性操作系統(tǒng)的硬件控制功能,通常是通過一些小的函數(shù)集合體的形式來提供的。這是因為硬件的控制是由全權(quán)負責的。語言提供的函數(shù),是用來在命令提示符中顯示字符串的函數(shù)。 系統(tǒng)調(diào)用和高級編程語言的移植性 操作系統(tǒng)的硬件控制功能,通常是通過一些小的函數(shù)集合體的形式來提供的。這些...
目錄 ??? 一,寫在前面 二,為什么使用文件 1,原因 2,數(shù)據(jù)流 3,緩沖區(qū)(Buffer) 4,C語言中帶緩沖區(qū)的文件處理 5,文件類型 6,文件存取方式 三,什么是文件 1,程序文件 ?2,數(shù)據(jù)文件 3,文件名 四,文件的打開和關(guān)閉? 1,文件指針 ?2,文件的打開和關(guān)閉 五,文件的順序讀寫 1,功能 2,代碼實現(xiàn) 六,文件的隨機讀寫 1,fseek 2,ftell 3,rewind 七,...
閱讀 1241·2021-11-11 16:54
閱讀 1755·2021-10-13 09:40
閱讀 953·2021-10-08 10:05
閱讀 3514·2021-09-22 15:50
閱讀 3718·2021-09-22 15:41
閱讀 1840·2021-09-22 15:08
閱讀 2355·2021-09-07 10:24
閱讀 3584·2019-08-30 12:52