C語言 字串

2021-10-02 20:06:37 字數 3958 閱讀 4252

字串陣列

單字元的輸入輸出

字串函式

字串找字元

字串找字串

安全問題

//字元陣列

char word=

;//字串

char word=

;

以0(整數0)結尾的一傳陣列。(0或者』/0』是一樣的(數值:48或者0x30),但是和』0』是不同的)

0標誌字串的結束,但是它不是字串的一部分

計算字串的長度的時候也不包含0

字串以陣列的形式存在,以陣列或者指標的形式訪問(更多的時候使用指標

需要使用到的標頭檔案:string.h裡邊的函式來處理字串

//定義

char

*str=

"hello"

;char world=

"hello"

;char world[10]

="hello"

;//\0編譯器會自動生成

"hello"會被編譯器變成乙個字元陣列放在某處,陣列的長度為6(結尾有』\0』)

注意:

不能用運算子對字串做運算

通過陣列的方式可以遍歷字串

指標形式定義的字串位於**段,只能讀,不能寫

使用陣列的方式定義字串,可以讀寫

char

*str=

"hello"

;//只能讀,不能寫

char world=

"hello"

;//能讀能寫

總結:1.構造乙個字串:用陣列的形式:2.處理乙個字串:用指標的形式3.char*不一定是個字串,只有它指向帶0的陣列才是字串

char string[8]

;scanf

("%s"

,string)

;printf

("%s"

,string)

;

scanf讀入結束標誌**:空格,tab,回車**

注意:scanf是不安全的,因為不知道要讀入內容的長度

解決問題:限制輸入的個數

scanf

("%7s"

,string)

;

字串的常見錯誤:

​ 1.以為char*就是字串型別,定義了乙個字串型別的變數就直接使用

//錯誤使用

char

*string;

scanf

("%s"

,string)

;

char buffer[

100]=""

;//空字串,buffer[0]='\0'

char buffer=

""//陣列的長度為1!放不下任何字串

char **a;:表示a是乙個指標,指向另乙個指標,那個指標指向乙個字串

char a[10]:表示有一大片空間,但是這個陣列的每個單元最多放10個字元(包括』\0』)

char *a:表示陣列的每乙個單元都是指標,指向乙個位址空間,每乙個單元可以存放無限制的字串。

int putchar(int c)

出寫乙個字元

返回寫了幾個字元,eof(-1)表示寫失敗

int getchar(void)

讀入乙個字元

返回型別為int是為了能返回eof(-1)

string.h的標頭檔案中

strlen函式

原型:size_t strlen(const char *s)

作用:返回s字串的長度(不包括結尾的0)

const的作用:保證不修改傳進來的函式

//自己封裝計算字串長度的函式

intmylen

(const

char

*s)return cnt;

}

strcmp函式

原型:int strlen(const char *s1,const char *s2)

作用:會根據 ascii 編碼依次比較 s1 和 s2 的每乙個字元,直到出現不到的字元,或者到達字串末尾(比較兩個字串。返回:

0s1==s2

1s1>s2

-1s1

//自己封裝比較字串的函式

intmycmp

(const

char

*s1,

const

char

*s2)

else

cnt++;}

}

strcpy函式

原型char* strcpy(char *restric dst,char *restric src)

作用:把src的字串拷貝到dst(目標在前,源在後)

​ restrict表示str和dst的位址空間不能重疊

複製乙個字串

char

*dst;

dst=

(char*)

malloc

(strlen

(string)+1

);strcpy

(dst,string)

;

//自己封裝複製字串的函式

void

mycpy

(char

*dst,

const

char

*str)

*dst=0;

}

strcat函式

原型cahr* strcat(cahr *restrict s1,const cahr *restrict s2)

作用:把s1拷貝到s2的後面,接成乙個長的字串

返回:s1

cahr* strchr(const char *s,int c)找第一次出現c的字元

cahr* strrchr(const char *s,int c)從右邊找第一次出現c的字元

如何找第二個字元?

char

*string=

"hello"

;strchr

(string,

'l')

;//尋找第一次出現的'l'

strchr

(strchr

(string,

'l')

)//尋找第二次出現的'l'

char* strstr(const char *s1,const cahr *s2)尋找過程中區分大小寫

char* strasestr(const char *s1,const cahr *s2)尋找過程中不區分大小寫

C語言字串 字串排序

本題要求編寫程式,讀入5個字串,按由小到大的順序輸出。輸入為由空格分隔的5個非空字串,每個字串不包括空格 製表符 換行符等空白字元,長度小於80。按照以下格式輸出排序後的結果 after sorted 每行乙個字串 red yellow blue green white after sorted b...

C語言 字串

char str lnj 字串變數 l n j 0 printf str size lu n sizeof str 字元陣列 這個並不是字串,而是字元陣列 char charvalues 如何輸出字串變數,s str 陣列的名稱,陣列的名稱就是陣列的位址 s的原理,從傳入的 位址 開始逐個取出,直到...

c語言字串

字串 字串1 概念 1.1 定義 1.1.1 用雙引號引起來的多個字元 1.2 兩個連續的雙引號中間是空格或回車,則兩個字串自動連在一起 1.3 遇見 0字串結束,0可以提前終止字串 1.4 初始化 1.4.1 char str 6 1.4.2 char str hello 編譯時自動給 加6 1....