c語言基礎筆記(8 字串與字元陣列)

2021-10-06 17:30:42 字數 4050 閱讀 9054

字串一定是在記憶體中以0結尾的乙個char陣列。

8.1 字元陣列定義

char array[100];

8.2 字元陣列初始化

char array[100] = ;

char array[100] = 」abcd」;

char array[100] = ;

char array = 「abcd」;

8.3 字元陣列使用

#include

//字串倒序

intmain()

printf

("%s\n"

,buf)

;return0;

}

ascii乙個位元組存放乙個字元

gbk用兩個位元組存放乙個漢字

8.4 隨機數產生函式rand與srand

標頭檔案stdilb.h

rand是偽隨機數產生器,每次呼叫rand產生的隨機數是一樣的

如果呼叫rand之前先呼叫srand就出現任意的隨機數

只要能保證每次呼叫srand函式的時候,引數的值是不同的,那麼rand函式就一定會產生不同的隨機數

srand() //隨機數種子發生器

rand() //隨機數產生器

#include

#include

#include

intmain()

return0;

}

8.5 用scanf輸入字串

「%s」的作用就是輸入乙個字串的,scanf是以回車鍵作為輸入完成標誌的,但回車鍵本身並不會作為字串的一部分。

如果scanf引數中的陣列長度小於使用者在鍵盤輸入的長度,那麼scanf就會緩衝區溢位,導致程式崩潰。

8.6 字串的結束標誌

scanf將回車、空格都認為是字串輸入結束標誌

8.7 字串處理函式

8.7.1 gets

gets(s);

gets認為回車是輸入結束的標誌,空格不是輸入結束的標誌,所以用gets這個函式就可以實現輸入帶空格的字串,但是gets和scanf一樣存在緩衝區溢位的問題

gets不能用類似「%s」或者「%d」之類的字元轉義,只能接受字串的輸入

8.7.2 fgets函式

gets函式不檢查預留緩衝區是否能夠容納使用者實際輸入的資料。多出來的字元會導致記憶體溢位,fgets函式改進了這個問題。

由於fgets函式是為讀取檔案設計的,所以讀取鍵盤時沒有gets那麼方便。

char s[100] = ;

fgets(s ,sizeof(s) ,stdin);//第乙個引數是char的陣列,第二個引數是陣列的大小,單位:位元組,第三個引數stdin代表標準輸入的意思。

fgets是安全的,不存在緩衝區溢位的問題,呼叫fgets的時候,只要能保證第二個引數小於等於陣列實際的大小,那麼就可以避免緩衝區溢位的。

8.7.3 puts函式

puts函式列印字串,與printf不同,puts會在最後自動新增乙個』\n』

char s = 「hello world」;

puts(s);

8.7.4 fputs函式

fputs是puts的文字操作版本

char s = 「hello world」;

fputs(s,stdout);

8.7.5 strlen,字串長度

size_t strlen(const char * _str);

返回不包含字串結尾』\n』的字串長度

char s[100] = 「hello world」;

int len = strlen(s);

printf(「len = %d\n」,len);

8.7.6 strcat,字串追加

size_t strcat(char * _str1,const char * _str2);

將引數_str2追加到_str1後尾

char s1[100] = 「fsfgg」;

strcat(s,s1);

strcat也存在緩衝區溢位的問題

8.7.7 strncat,字串有限追加

size_t strncat(char * _str1,const char * _str2,size_t len);

strcat(s,s1,3); //合併的時候可以限制追加多少個字元

8.7.8 strcmp,字串比較

int strcmp(const char * _str1,const char * _str2);

比較兩個字串是否相等,相等返回0,不相等返回非0

if(strcmp(s1,s2)) = = 0)

8.7.9 strncmp,字串有限比較

if(strncmp(s1,s2,5) = = 0) //strncmp的意思是只比較指定數量的字元。

8.7.10 strcpy字串拷貝

char *strcpy(char * _str1,const char * _str2);

將引數_str2拷貝到引數_str1中

strcpy(s1,s2);

8.7.11 strncpy字串有限拷貝

strncpy(s1,s2,3);

8.7.12 sprintf格式化字串

和printf函式功能類似,printf函式將格式化結果輸出到螢幕,sprintf將格式化結果輸出到字串

int i = 200;

char s[100] = ;

sprintf(s, 「i = %d」,i);

8.7.13 sscanf函式

sscanf類似於scanf函式,scanf從鍵盤讀取使用者輸入,scanf從指定格式化字串讀取輸入

8.7.14 strchr查詢字元

char * strchr(char * _str, int _ch);

在引數_str中查詢引數_ch指定字元,找到返回字元_ch在_str中所在位置,沒有找到返回null;

8.7.15 strstr查詢子串

char * strstr(char * _str,const char * _substr);

在引數_str中查詢引數_substr指定子串,找到返回子串在_str中所在位置,沒有找到返回null;

8.7.16 strtok分割字串

字元在第一次呼叫時strtok()必需給予引數s字串,往後的呼叫則將引數s設定成null每次呼叫成功則返回指向被分割出片段的指標。

如果strtok沒有找到指定的分割符號,那麼返回null

char buf = 「abcd@efg@h」;

char *p = strtok(buf,」@」);

while§

8.7.17 atoi轉化為int

int i1 = atoi(a); //將字串轉化為乙個整數

需要包含標頭檔案stdlib.h

8.7.18 atof轉化為float

8.7.19 atol轉化為long

#include

//計算字串

intcalc_string

(const

char

*s);

char oper1 =0;

char buf2[

100]=;

int len =

strlen

(s);

//得到字串的長度

int i;

int start;

for(i=

0;istart = i +1;

for(

;iprintf

("buf1 = %s,oper1 = %c,buf2 = %s\n"

,buf1,oper1,buf2)

;switch

(oper1)}}

intmain()

C語言基礎學習 8 字元陣列和字串

author 想文藝一點的程式設計師 自動化專業 工科男 再堅持一點,再自律一點 csdn 想文藝一點的程式設計師 來自朱老師學習筆記 7 字元陣列及它的兩種初始化 include intmain int argc,char ar 5 char b abcde 6 printf sizeof a d...

C語言 基礎六 字串

1 字串描述 字串實際上是使用 null 字元 0 終止的一維字元陣列。因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字串。由於在陣列的末尾儲存了空字元,所以字元陣列的大小比單詞 hello 的字元數多乙個。char greeting 6 依據陣...

8 字串函式

right left 可從列中選出指定數量的字元 right location,2 location 欄位 substring index 可擷取部分字段值 substring index location,1 尋找第乙個逗號,然後擷取之前的內容 substring your string,star...