字串陣列
單字元的輸入輸出
字串函式
字串找字元
字串找字串
安全問題
//字元陣列
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....