字串一定是在記憶體中以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...