1. 程式人生 > >C語言基礎-第四課-數組與字符串

C語言基礎-第四課-數組與字符串

cat ant 隨機數 打印 第一個 長度 stdin 有效 borde

1 數組

1.1 一維數組定義與使用

int array[10];//定義一個一維數組,名字叫array,一共有10個元素,每個元素都是int類型的

array[0] = 20;

array[1] = 30;

array[9] = 80;

//array[10] = 100;//錯誤,沒有 array[10]這個元素

1.2 數組在內存的存儲方式

數組在內存中就是一段連續的空間,每個元素的類型是一樣的

1.3 一維數組初始化

int array[10] = { 100, 1, 5, 3, 4, 5, 6, 7, 8, 0 };//定義數組的同時為數組的成員初始化值

int array[10] = { 3, 7, 9 };//將數組的前三個元素賦值,其余元素置為0

int array[10] = { 0 };//將數組所有的元素都置為0

int i;

for (i = 0; i < 10; i++)

{

array[i] = 0;//通過循環遍歷數組的每個元素,將元素的值置為0

}

1.4 二維數組定義與使用

int array[2][3];//定義了一個二維數組,有兩個array[3]

1.5 二維數組初始化

int a[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };

2 字符串與字符數組

2.1 字符數組定義

char array[100];

2.2 字符數組初始化

char array[100] = {‘a‘, ‘b‘, ‘c‘,‘d‘};

char array[100] = "abcd";

char array[100] = { 0 };

char array[] = "abcd";

2.3 字符數組使用

2.4 隨機數產生函數randsrand

頭文件stdlib.h

Rand是偽隨機數產生器,每次調用rand產生的隨機數是一樣的

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

只要能保證每次調用srand函數的時候,參數的值是不同的,那麽rand函數就一定會產生不同的隨機數

#include <time.h>

int t = (int)time(NULL);

srand(t);

for (int i = 0; i < 10; i++)

{

printf("%d\n", rand());

}

2.5 scanf輸入字符串

char s[10] = { 0 };

scanf("%s", s);//"%s"的作用就是輸入一個字符串的,scanf是以回車鍵作為輸入完成標示的,但回車鍵本身並不會作為字符串的一部分

//如果scanf參數中的數組長度小於用戶在鍵盤輸入的長度,那麽scanf就會緩沖區溢出,導致程序崩潰

int i;

for (i = 0; i < 10; i++)

{

printf("%d\n", s[i]);

}

printf("----------------------------------\n");

printf("%s\n", s);

return 0;

2.6 字符串的結束標誌

Scanf將回車,空格都認為是字符串輸入結束標誌,

2.7 字符串處理函數

2.7.1 gets

char s[100] = { 0 };

gets(s);//gets認為回車的輸入結束標示,空格不是輸入結束標示,所以用gets這個函數就可以實現輸入帶空格的字符串

//gets和scanf一樣存在緩沖區溢出的問題

int i;

for (i = 0; i < 10; i++)

{

printf("%d\n", s[i]);

}

printf("----------------------------------\n");

printf("%s\n", s);

Gets不能用類似“%s”或者“%d”之類的字符轉義,只能接受字符串的輸入

2.7.2 fgets函數

gets函數不檢查預留緩沖區是否能夠容納用戶實際輸入的數據。多出來的字符會導致內存溢出,fgets函數改進了這個問題。

由於fgets函數是為讀取文件設計的,所以讀取鍵盤時沒有gets那麽方便

char s[100] = { 0 };

fgets(s, sizeof(s), stdin);

2.7.3 puts函數

puts函數打印字符串,與printf不同,puts會在最後自動添加一個’\n’

char s[] = "hello world";

puts(s);

2.7.4 fputs函數

fputs是puts的文件操作版本,

char s[] = "hello world";

fputs(s, stdout);

2.7.5 strlen,字符串長度

size_t strlen(const char * _Str);

返回不包含字符串結尾’\0’的字符串長度

char s[100] = "hello world";

int len = strlen(s);//得到字符串長度,返回一個字符串中有效字符的數量(不包含字符串結尾的0)

printf("len = %d\n", len);

return 0;

2.7.6 strcat,字符串追加

size_t strcat(char * _Str1, const char * _Str2);

將參數_Str2追加到_Str1後尾

char s[1024] = "hello world";

int len = strlen(s);//得到字符串長度,返回一個字符串中有效字符的數量(不包含字符串結尾的0)

printf("len = %d\n", len);

char s1[100] = "abc123456789";

strcat(s, s1);//將兩個字符串合並,結果放入第一個參數裏面,strcat也存在緩沖區溢出的問題

printf("%s\n", s);

2.7.7 strncat,字符串有限追加

size_t strncat(char * _Str1, const char * _Str2, size_t len);

2.7.8 strcmp,字符串比較

int strcmp(const char * _Str1, const char * _Str2);

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

2.7.9 strncmp,字符串有限比較

2.7.10 strcpy字符串拷貝

char *strcpy(char * _Str1, const char * _Str2);

將參數_Str2拷貝到參數_Str1中

2.7.11 strncpy字符串有限拷貝

2.7.12 sprintf,格式化字符串

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

2.7.13 Sscanf函數

Sscanf類似於scanf函數,,scanf從鍵盤讀取用戶輸入,scanf從指定格式化字符串讀取輸入

2.7.14 strchr查找字符

char * strchr(char * _Str, int _Ch);

在參數_str中查找參數_Ch指定字符,找到返回字符_Ch在_Str中所在位置,沒有找到返回NULL;

2.7.15 strstr查找子串

char * strstr(char * _Str, const char * _SubStr)

在參數_str中查找參數_SubStr指定子串,找到返回子串在_Str中所在位置,沒有找到返回NULL;

2.7.16 strtok分割字符串

字符在第一次調用時strtok()必需給予參數s字符串,往後的調用則將參數s設置成NULL每次調用成功則返回指向被分割出片段的指針

char buf[] = "[email protected]@igk";

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

while (p)

{

printf("%s\n", p);

p = strtok(NULL, "@");

}

2.7.17 atoi轉化為int

需要包含頭文件stdlib.h

2.7.18 atof轉化為float

2.7.19 atol轉化為long

C語言基礎-第四課-數組與字符串