
一維字符數組應用 存儲字符串。1.定義類型 數組名[整形常量]; 整形常量 數組的容量表示可以儲存多少個字符 類型 char c語言規定字符串必須使用\0 作為結束標準。 如果你要在數組中儲存一個 hello , hello\0 共計6個字符空間 char string[100]; ? ?2.訪問數組名[整形表達式]str[0] a;char c str[0];使用下標 運算符 [] ,整形表達式 ,常量變量表達式-》 整形 。下標從 0 開始下標的范圍 0 - 有效長度 (從下標0 開始 到字符串\0 之前的有效字符長度);字符數組 也是數組不能整體操作 。除非調用函數。char str[10]; str hello; // error 不能整體賦值。// 訪問 寫入 // 下標從0 開始, 長度 5 ,從下標0 開始 到字符串\0 之前的有效字符長度 str[0] h; // str[0] char str[1] e; str[2] l; str[3] l; str[4] o; str[5] \0; // \0 不可以省略 ? // 讀出 數組元素 putchar(str[0]); // h printf(%c\n,str[1]);//e char c str[4]; // 字符數組 不可整體操作 //str world; puts(str); // 字符串整體輸出 被輸出的字符串一定是以\0 結尾 printf(str is %s\n,str);3.初始化// 全部初始化 char str1[6]{h,e,l,l,o,\0}; // a 字符常量 1字符 1byte char str2[6]{hello}; // hello 字符串常量默認是有\0 char str3[6]hello; // 用的多 ? // 局部初始化 ,剩下沒有給處值的都是\0 char str4[10]{h,e,o,\0}; // \0 建議手動加上。 char str5[10]{hel}; char str6[10]hello; // 常用 char str7[10]{0}; // 常用空串 ? 0; // 數字0 \0 ; //字符串結束標志 0 ‘\0’ 在內存中存儲的 都是 0 0; //字符0 ascii 48 0x30 ? char str8[]{h,e,l};// 不是字符串字符數組沒有\0 char str9[]{hello}; char str10[]hello; char str11[]{0}; // 不要寫成這種遍歷char str[10]{0}; printf(sizeof str[10] is %lu\n,sizeof(str)); printf(sizeof str[0] is %lu\n,sizeof(str[0])); int i 0 ; int len 0 ; // 遍歷的輸入 for(i0;i10 - 1 ;i) // \0 { scanf(%c,str[i]); if(# str[i]) { break; } len; ? } str[len]\0; //遍歷的輸出 for(i0;ilen;i ) // { putchar(str[i]); } ?字符串相關的常用函數函數名功能備注strlen獲得字符串有效字符長度 size_t strlen(const char *s);strcpy字符串的復制從一個數組到另一個數組 char *strcpy(char *dest, const char *src);strcat字符串的拼接 char *strcat(char *dest, const char *src);strcmp字符串的比較比較字符串的內容是否一致 int strcmp(const char *s1, const char *s2);strlen char str[100]{0}; // char [] char * printf(input string); gets(str); //int len strlen(str); // 有效字符的個數 // int len 0; ? while(1) { if(\0!str[len]) { len; } else { break; } } ? 注意 strlen 和sizeof 的區別 1. strlen 函數 需要外部支持 c語言標準庫 sizeof 關鍵字 不需要額外的支持 直接就能用 2. 相對字符數組 strlen 有效字符的個數 單位字節 sizeof 獲得數組在內存中的大小 單位字節strcpy int main() { //char str1[100]hello; char str1[100]{0}; printf(input string:); gets(str1); char str2[100]{0}; ? // 不能整體操作 // str2 str1; // 把str1 的內容 復制到 str2 //strcpy(str2,str1); int i 0 ; while(1) { str2[i] str1[i]; if(\0 str1[i]) { break; } i; } puts(str2); return 0; } 注意 目標數組的大小要能容納的下源數組的的內容。否則 數組越界。后續行為不確定(可能可以繼續運行也可能程序崩潰但從邏輯上已經錯誤)。 ?strcat ? int main() { ? char str1[100]hello;//dst char str2[100],world;//src //strcat(str1,str2); // int i 0 ; int j 0 ; while(1) // 找到 str1的結束的地方 { if(\0!str1[i]) { i; } else { break; } } ? while(1)// 開始拼接 { str1[i] str2[j]; if(\0 str2[j]) { break; } i; j; } printf(strcat str1:%s\n,str1); ? } ?strcmp 比較兩個字符串的內容是否一致 ? int main() { char str1[100]hello; char str2[100]aaaaa; char str3[100]hello; ? // 不能寫成這樣這個不是比較 str1,str2 的字符串內容 /* if(str1 str2) { }*/ #if 0 // 系統函數的使用 int ret 0; ret strcmp(str1,str2); printf(str1 cmp str2 ret %d\n,ret); ? ret strcmp(str1,str3); printf(str1 cmp str3 ret %d\n,ret); #endif ? int i 0 ; int ret 0 ; while(1) { ret str1[i] - str3[i]; if(0ret str1[i]!\0) { i; } else { break; } } printf(ret is %d\n,ret); ? } ? ?二維字符數組應用存儲多個字符串。二維數組 可以被稱為 數組的數組。 數組的元素又是一個數組的結構。語法定義數據類型 數組名[行數][列數] 一維數 二維數 行數列數整型常量char str[3][100] ;訪問, 通過下標運算符 [], 從0 開始表示第一個元素。 不要越界char str[3][100] ; 最后一個元素的下標位置 str[2][99] ? str[0] ,表示第一個字符數組 數組名 str[0][0], 表示第一個字符數組里的第一個字符元素存儲 特性單一性連續性有序初始化char str1[3][50]{hello,ok,how}; char str2[3][50]{{hello},{ok},{how}}; char str3[3][50]{0} ; // 常用 char str4[3][50]{{0}}; char str5[][50]{hello,ok,123}; //一維大小可以省略二維不能省 //char str6[3][]{hello,ok,123}; ?字符串 逆序排序//逆序 for(i0;isize/2;i) { strcpy(t,str[i]); strcpy(str[i],str[size-1-i]); strcpy(str[size-1-i],t); } ? //排序 sort int j 0 ; for(jsize-1;j0;j--) { for(i0;ij;i) { if(strcmp(str[i],str[i1])0) { strcpy(t,str[i]); strcpy(str[i],str[i1]); strcpy(str[i1],t); } } } ?