浙江做網(wǎng)站的公司百度公司招聘信息
數(shù)組的概念
什么是數(shù)組
數(shù)組是相同類型,有序數(shù)據(jù)的集合。
數(shù)組的特征
-
數(shù)組中的數(shù)據(jù)被稱為數(shù)組的元素,是同構(gòu)的
-
數(shù)組中的元素存放在內(nèi)存空間里 (char player_name[6]:申請(qǐng)?jiān)趦?nèi)存中開(kāi)辟6塊連續(xù)的基于char類型的變量空間)
衍生概念:下標(biāo)(索引)
-
下標(biāo)或索引代表了數(shù)組中元素距離第一個(gè)元素的偏移位置。
-
數(shù)組中元素的地址值,下標(biāo)越大,地址值越大。(每一塊內(nèi)存空間都有一個(gè)獨(dú)有的內(nèi)存地址)。
-
數(shù)組的下標(biāo)是從0開(kāi)始的。
一維數(shù)組
數(shù)組的定義
-
類型說(shuō)明符 數(shù)組名[數(shù)組容量]
說(shuō)明:
-
數(shù)組的類型說(shuō)明符由數(shù)組中的元素來(lái)決定,也就是元素是什么類型,數(shù)組就是什么類型
-
數(shù)組名也是標(biāo)識(shí)符, 我們所說(shuō)的數(shù)組(名),大家可以理解為數(shù)據(jù)類型是數(shù)組的變量(名)。
-
數(shù)組容量也可以叫做常量表達(dá)式,舉例: int ages[10]、int lcd[1024*768]
類型:代表了數(shù)組中元素的類型
容量:數(shù)組中能存儲(chǔ)多少個(gè)元素,數(shù)組容量可以是一個(gè)常量、常量表達(dá)式,還可以是符號(hào)常量,但必須是整型。
深入理解:定義一個(gè)數(shù)組,相當(dāng)于申請(qǐng)了一個(gè)可以容納所指定元素?cái)?shù)量的內(nèi)存單元。所申請(qǐng)的內(nèi)存單元是連續(xù)的。
定義一個(gè)數(shù)組,相當(dāng)于定義了多個(gè)匿名變量,這些變量可以通過(guò) 數(shù)組名[下標(biāo)] 來(lái)標(biāo)識(shí)。
舉例:
// 定義一個(gè)數(shù)組 int arr[10]; // 問(wèn)題:上面數(shù)組中,最小下標(biāo)0,最大下標(biāo)9
經(jīng)過(guò)上面的案例,分析得到
數(shù)組的最大下標(biāo) = 數(shù)組元素個(gè)數(shù)(數(shù)組容量) - 1
數(shù)組元素的訪問(wèn)
原則:數(shù)組中的元素不能一次性訪問(wèn)所有元素,只能一個(gè)一個(gè)的訪問(wèn)。
訪問(wèn)方式:
數(shù)組名[下標(biāo)];
舉例:
// 定義一個(gè)容納10個(gè)元素的int數(shù)組 int arr[10]; // 給數(shù)組的第一個(gè)元素進(jìn)行賦值 arr[0] = 89; // 訪問(wèn)數(shù)組的第一個(gè)元素 int a = arr[0]; // 問(wèn)題:以下訪問(wèn)是否正確 int b = arr[10]; // error,下標(biāo)越界異常
注意:數(shù)組元素的訪問(wèn)一定不能越界。
案例:
/* 需求:一維數(shù)組案例-引用數(shù)組元素。利用循環(huán)給數(shù)組元素a[0]~a[9]賦值0~9,并且逆序輸出 */ #include <stdio.h> int main() {// 創(chuàng)建一個(gè)數(shù)組int arr[10];// 使用for循環(huán)給數(shù)組賦值for(int i = 0;i < 10;i++){arr[i] = i;}// 逆序輸出// 我們通過(guò)循環(huán)將數(shù)組中的元素一個(gè)個(gè)取出來(lái),稱之為遍歷for(int j = 9;j >= 0;j--){printf("%d ",arr[j]);}printf("\n"); // 純粹換行return 0; }
數(shù)組的初始化
定義數(shù)組的同時(shí),用指定數(shù)據(jù)來(lái)給對(duì)應(yīng)元素賦值。
簡(jiǎn)化數(shù)組定義后,需要對(duì)元素一一賦值操作。
語(yǔ)法規(guī)則:
-
類型 數(shù)組名[容量] = {常量1,常量2,常量3...};
注意事項(xiàng):
-
數(shù)組可以部分初始化:也就是可以給數(shù)組中前幾個(gè)元素初始化,未被初始化的元素系統(tǒng)將自動(dòng)初始化,如0;如果定義數(shù)組時(shí)未指定數(shù)據(jù)容量,則系統(tǒng)會(huì)根據(jù)初始化元素的個(gè)數(shù)來(lái)決定數(shù)組容量。
// 1. 如果定義數(shù)組時(shí)只給數(shù)組前幾個(gè)初始化,后續(xù)剩余元素會(huì)自動(dòng)完成初始化,比如賦值0 int arr[10] = {1,2,3,4,5} // 推薦寫法,等價(jià)于以下寫法 int arr[10] = {1,2,3,4,5,0,0,0,0,0} // 2. 如果定義數(shù)組時(shí)未指定數(shù)據(jù)容量,根據(jù)初始化元素個(gè)數(shù)來(lái)決定容量 int arr[] = {1,2,3,4,5} // 推薦寫法,等價(jià)于以下寫法 int arr[5] = {1,2,3,4,5}
衍生概念:
-
柔性數(shù)組:柔性數(shù)組的概念是在C99標(biāo)準(zhǔn),針對(duì)結(jié)構(gòu)體的最后一個(gè)成員可以是一個(gè)未指定大小的數(shù)組;
廣義簡(jiǎn)單理解:數(shù)組容量待定或者待確定的數(shù)組,舉例: int arr[] = {1,2,3,4,5}
面試題:
-
在不知道數(shù)組類型的情況下,如何確定數(shù)組元素的個(gè)數(shù)
int length = sizeof(arr) / sizeof(arr[0])
說(shuō)明:
1. arr就是我們計(jì)算的數(shù)組本身,`sizeof(arr)`用來(lái)計(jì)算該數(shù)組中總的字節(jié)大小。 2. `sizeof(arr[0])`用來(lái)計(jì)算數(shù)組中一個(gè)元素所占的字節(jié)大小,因?yàn)閿?shù)組中的元素類型相同,所以計(jì)算哪一個(gè)都行。 3. `sizeof(arr)/sizeof(arr[0])`就是用數(shù)組中總的字節(jié)數(shù)除以每一個(gè)元素所占的字節(jié)數(shù),從而得到元素的個(gè)數(shù)。
一維數(shù)組案例
案例1:
/* 需求:一維數(shù)組案例-非波拉契數(shù)列 */ #include <stdio.h> int main() {int i;// 循環(huán)變量int f[20] = {1,1}; // 定義一個(gè)數(shù)組,用來(lái)存儲(chǔ)數(shù)列,默認(rèn)存儲(chǔ)第1位和第2位int length = sizeof(f)/sizeof(f[0]);// 計(jì)算數(shù)組的元素個(gè)數(shù)// 生出數(shù)列存入數(shù)組for(i = 2;i < length;i++){// 給數(shù)組元素賦值,從數(shù)組的第3個(gè)元素開(kāi)始f[i] = f[i - 2] + f[i - 1];}// 遍歷數(shù)組// 通過(guò)循環(huán)將數(shù)組中的每一個(gè)元素取出來(lái),稱之為遍歷for(i = 0;i < length;i++){// 遍歷的時(shí)候,要求一行顯示5個(gè)數(shù)if(i % 5 == 0){printf("\n");}printf("%6d",f[i]);}printf("\n");return 0; } ? ?
數(shù)組的典型應(yīng)用:數(shù)據(jù)排序
冒泡排序
-
向后冒泡 思想:
-
一次只排好一個(gè)數(shù),針對(duì)n個(gè)數(shù),最差情況需要 n-1次就可以排好
-
每次排序?qū)⑾噜彅?shù)據(jù)兩兩比較,將較大或較小的數(shù)據(jù)向后交換,等所有數(shù)據(jù)都比較完成,將較大/較小的數(shù)就會(huì)出現(xiàn)在最后,這也是該數(shù)應(yīng)該有的位置。
-
在余下的數(shù)中,再次應(yīng)用第2步的操作,直到只剩下一個(gè)數(shù)。
-
向前冒泡
思想:
-
一次只排好一個(gè)數(shù),針對(duì)n個(gè)數(shù),最差情況需要n-1次就可以排好
-
每次排序假定第一個(gè)元素是最大/最小的,用第一個(gè)元素的后面的元素一一與第一個(gè)元素比較,遇到較大/較小的和第一個(gè)元素交換,訪問(wèn)完數(shù)組的最后一個(gè)元素,就排好了一個(gè)數(shù);
-
在余下的數(shù)中,再次應(yīng)用第2步的操作,直到只剩下一個(gè)數(shù)。
-
一維數(shù)組案例
案例2:
/* 需求:一維數(shù)組案例-冒泡排序 */ #include <stdio.h> int main() {// 創(chuàng)建一個(gè)數(shù)組,用來(lái)存儲(chǔ)排序的數(shù)列int arr[11];int i,j,temp;// i:比較的輪數(shù),j:每一輪比較的次數(shù),temp:臨時(shí)變量,用來(lái)比較時(shí)交換數(shù)據(jù)printf("請(qǐng)輸入11個(gè)測(cè)試整數(shù):\n");// 計(jì)算數(shù)組的大小int length = sizeof(arr) / sizeof(int); // 這里 sizeof(int) 等價(jià)于 sizeof(arr[0]);// 通過(guò)循環(huán)錄入數(shù)據(jù)for(i = 0;i < length; i++){scanf("%d",&arr[i]);}printf("\n");// 對(duì)數(shù)組arr使用冒泡進(jìn)行排序(注意:我們使用標(biāo)準(zhǔn)冒泡,大家也可以自行補(bǔ)充優(yōu)化版的冒泡,如雞尾酒排序法等等)// 外層循環(huán):控制比較的輪數(shù),因?yàn)橛?1個(gè)數(shù),所以我們需要比較 length -1 輪,也就是比較10輪for(i = 0;i < length -1;i++){// 內(nèi)層循環(huán):每一輪比較的次數(shù),每一輪比較的次數(shù)為 length - 1 - i, 3-1-0=2,3-1-1=1,3-1-2=0for(j = 0;j < length-1-i;j++){// 相鄰的兩個(gè)數(shù)進(jìn)行比較,滿足條件交換位置if(arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}printf("冒泡排序后遍歷數(shù)組:\n");for(i = 0; i < length; i++){printf("%4d",arr[i]);}printf("\n");return 0; }
案例3:
/* 需求:一維數(shù)組案例-從鍵盤輸入年、月、日,計(jì)算并輸出該日是該年的第幾天。 */ #include <stdio.h> int main() {// 定義變量:年,月,日,統(tǒng)計(jì)總天數(shù),循環(huán)變量,用來(lái)遍歷當(dāng)前月前面的月份int year,month,day,sum,k;// 定義一個(gè)數(shù)組,用來(lái)存放1~12月每月的天數(shù)int t[] = {31,0,31,30,31,30,31,31,30,31,30,31};// 柔性數(shù)組printf("請(qǐng)輸入年份、月份、天:\n");scanf("%d,%d,%d",&year,&month,&day);// 因?yàn)槎卤容^特殊,存在平年和潤(rùn)年這樣的因素,所以需要進(jìn)行平年和潤(rùn)年的判斷if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){t[1] = 29; // 潤(rùn)年 2月 29天}else{t[1] = 28; // 平年 2月 28天}sum = day; // 默認(rèn)記錄最后一個(gè)月的天數(shù)// 這是該年的第幾天for(k = 0; k < month -1;k++){sum += t[k]; // 疊加前幾個(gè)月的天數(shù)}printf("%d月%d日是%d年的第%d天。\n",month,day,year,sum);return 0; } ?
二維數(shù)組
定義
-
二維數(shù)組本質(zhì)上是一個(gè)行列式的組合,也就是說(shuō)二維數(shù)組是有行和列兩部分構(gòu)成。二維數(shù)組數(shù)據(jù)是通過(guò)行列進(jìn)行解讀。
-
二維數(shù)組可被視為一個(gè)特殊的一維數(shù)組,相當(dāng)于二維數(shù)組又是一個(gè)一維數(shù)組,只不過(guò)它的元素是一維數(shù)組。
語(yǔ)法
類型 數(shù)組名[行數(shù)][列數(shù)];
舉例:
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; // 等價(jià)于以下寫法 int arr[][3] = {{1,2,3},{4,5,6},{7,8,9}}; // 柔性數(shù)組 int arr[3][] = {{1,2},{4,5,6},{7}} // 等價(jià)于 {{1,2,0},{4,5,6},{7,0,0}}
應(yīng)用場(chǎng)合
主要應(yīng)用于數(shù)據(jù)有行列要求的情況。
特殊寫法
下標(biāo)可以是整型表達(dá)式,如: a[2-1] [2*2-1]
下標(biāo)可以是已經(jīng)有值的變量或數(shù)組元素, 如 a[2*x-1] [b[3] [1]]
數(shù)組元素可以出現(xiàn)在表達(dá)式中, 如: b[1] [2]=a[2] [3]/2
初始化
-
分行給二維數(shù)組賦初值
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
-
可將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按照排列順序?qū)υ刭x值。
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; // 等價(jià)于上面的寫法
-
可對(duì)部分元素賦初值,其余未賦值部分自動(dòng)填充 0 | \0 | 0.0...
int a[3][4] = {{1},{5,6},{9}}; // 等價(jià)于 int a[3][4] = {{1,0,0,0},{5,6,0,0},{9,0,0,0}}
-
若對(duì)全部元素賦初值,自定義數(shù)組時(shí)可以省略第1為數(shù)組的長(zhǎng)度,第2維數(shù)組的長(zhǎng)度必須指明。
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
-
在分行賦初值是,也可以省略第1維的長(zhǎng)度。
int a[][4] = {{1,2,3},{0},{0,10}}; // 等價(jià)于 int a[][4] = {{1,2,3,0},{0,0,0,0},{0,10,0,0}}
案例
案例1:
/** * 案例:二維數(shù)組的遍歷 */ #include <stdio.h> int main() {int arr[][3] = {{1},{2,4},{5,6,7}};// 經(jīng)過(guò)論證:二維數(shù)組我們必須指明第2維的數(shù)組的長(zhǎng)度// 獲取行元素的大小int length = sizeof(arr) / sizeof(arr[0]); // 如果是二維數(shù)組,第1維的長(zhǎng)度,應(yīng)該是如左側(cè)這樣獲取printf("length:%d\n",length);// 遍歷二維數(shù)組,需要使用雙層for循環(huán),外層遍歷行,內(nèi)層遍歷每一行的列for(int row = 0;row < length;row++){// 獲取列元素的總大小int len = sizeof(arr[row]) / sizeof(int);for(int col = 0; col < len; col++){// 獲取列元素printf("%3d",arr[row][col]);// 意思是獲取數(shù)組arr 第row行第col列}printf("\n");}return 0; } // 數(shù)據(jù)類型,分支結(jié)構(gòu),循環(huán)結(jié)構(gòu),數(shù)組
案例2:
/** * 需求:二維數(shù)組案例-矩陣的轉(zhuǎn)置(就是將一個(gè)2行3列的數(shù)組轉(zhuǎn)換為3行2列的數(shù)組) */ #include <stdio.h> int main() {// 準(zhǔn)備2個(gè)數(shù)組,存放轉(zhuǎn)前和轉(zhuǎn)后的數(shù)據(jù)int arr_before[2][3] = {1,2,3,4,5,6};int arr_after[3][2] = {0};// 初始化,每一列上都是0// 遍歷arr_beforefor(int i = 0;i < sizeof(arr_before)/sizeof(arr_before[0]);i++){for(int j = 0;j < sizeof(arr_before[i])/sizeof(int);j++){// 轉(zhuǎn)置arr_after[j][i] = arr_before[i][j];}}// 遍歷arr_afterfor(int i = 0;i < sizeof(arr_after)/sizeof(arr_after[0]);i++){for(int j = 0;j < sizeof(arr_after[i])/sizeof(int);j++){// 輸出printf("%4d",arr_after[i][j]);}printf("\n");}return 0; }
案例3
/** * 需求:二維數(shù)組案例-準(zhǔn)備一個(gè)int類型的二維數(shù)組,求該數(shù)組中大的最大值,以及對(duì)應(yīng)的行號(hào),列號(hào) */ #include <stdio.h> int main() {// 準(zhǔn)備一個(gè)二維數(shù)組int arr[3][4] = {{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};// 創(chuàng)建變量,用保存最大值、行號(hào)、列號(hào)int max = arr[0][0],row=0,col=0;// 遍歷集合for(int i = 0;i < sizeof(arr) / sizeof(arr[0]);i++){for(int j = 0;j < sizeof(arr[i]) / sizeof(arr[i][0]);j++){// 判斷最大值if(arr[i][j] > max){max = arr[i][j];row = i;col = j;}}}printf("max=%d,row=%d,col=%d\n",max,row,col);return 0; } ? ? ? ? ?
字符數(shù)組
概念
-
元素類型為char字符型的數(shù)組,字符數(shù)組往往是用來(lái)存儲(chǔ)字符串?dāng)?shù)據(jù)的。需要注意的一點(diǎn)是,我們C語(yǔ)言中的字符是字節(jié)字符。
-
字節(jié)字符:也就是一個(gè)字符占1個(gè)字節(jié)
測(cè)試題:
char a = 'A' // 正確 char b = '1' // 正確 char c = 65 // 正確 這是ASCII碼編號(hào),對(duì)應(yīng)的值是 'A' char d = "A" // 錯(cuò)誤,這是字符串的寫法,也是char數(shù)組的寫法,char d[1] = "A" char e = '馬' // 錯(cuò)誤,中文一個(gè)字符超過(guò)1一個(gè)字節(jié)
語(yǔ)法
char 數(shù)組名[容量]; char 數(shù)組名[行容量][列容量];
字符數(shù)組的語(yǔ)法就是之前所學(xué)一維數(shù)組和二維數(shù)組的語(yǔ)法,只不過(guò)數(shù)據(jù)類型是char而已。
注意: 如果我們的char數(shù)組初始化的時(shí)候,沒(méi)有完全賦完值的時(shí)候,空出來(lái)的地方使用 \0 進(jìn)行填充。
字符案例
案例1:
/** * 需求:字符數(shù)組案例-輸出一個(gè)字符串(I LOVE YOU!) */ #include <stdio.h> int main() {// 準(zhǔn)備一個(gè)測(cè)試字符串 I LOVE YOU!char arr[11] = {'I',' ','L','O','V','E',' ','Y','O','U','!'};// 通過(guò)一個(gè)for循環(huán)進(jìn)行遍歷輸出for(int i = 0;i < sizeof(arr)/sizeof(char);i++){printf("%c",arr[i]);}printf("\n");return 0; }
案例2:
/** * 需求:字符數(shù)組案例-輸出一個(gè)用字符組成的菱形圖案 */ #include <stdio.h> int main() {// 準(zhǔn)備數(shù)據(jù)char arr[5][5] = {{' ',' ','*',' ',' '},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{'','*',' ','*',' '},{' ',' ','*',' ',' '}};// 遍歷數(shù)組for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++){for(int j = 0;j < sizeof(arr[i])/sizeof(char);j++){// 打印菱形printf("%c",arr[i][j]);}// 內(nèi)層循環(huán)每結(jié)束一輪,就是一行printf("\n");}printf("\n");return 0; } ? ?
字符串和字符串結(jié)束標(biāo)志
說(shuō)明
字符數(shù)組的多樣表示
我們的char數(shù)組可以以數(shù)組的方式一個(gè)個(gè)輸出每個(gè)字符;我們的char數(shù)組也可以以字符串的方式整體
進(jìn)行輸出所有字符。具體如下面案例:
/* 需求:字符數(shù)組->字符串 */ #include <stdio.h> int main() {// 字符串第1種表示:char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d'};// 字符串第2種表示:char s2[] = {"hello world"};// 字符串第3種表示:char s3[] = "hello world";// 測(cè)試,使用字符串方式打印,這樣就不用一一遍歷printf("%s\n",s1);printf("%s\n",s2);printf("%s\n",s3);return 0; }
注意
-
字符串的長(zhǎng)度與字符數(shù)組的長(zhǎng)度不一定相同。
-
利用字符串常量可以對(duì)字符數(shù)組進(jìn)行初始化,但不能用字符串常量為字符數(shù)組賦值。
// 正確寫法:利用字符串常量給字符數(shù)組初始化 char b[15] = "China"; // 錯(cuò)誤寫法:利用字符串常量給字符數(shù)組賦值 char b[15]; b[15] = "China";
字符串的基礎(chǔ)操作
字符串輸入
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char name[20];printf("請(qǐng)輸入您的姓名:\n");scanf("%s",name);// 如果是字符串,這里不是變量地址,是變量名printf("您的姓名是:%s\n",name);return 0; }
注意:采用scanf進(jìn)行字符串輸入,要求字符串中不能存在空格,否則字符串遇到空格會(huì)結(jié)束。
-
fgets(數(shù)組名,數(shù)組容量,stdin);
說(shuō)明:采用fgets進(jìn)行字符串輸入,可獲取所有輸入的字符串,包含 \n
,在實(shí)際的字符串處理時(shí),我們
可能需要處理 \n
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char name[20];printf("請(qǐng)輸入您的姓名:\n");fgets(name,sizeof(name)/sizeof(char),stdin);// 輸入,返回地址puts(name);// 輸出return 0; }
注意:
-
如果輸入的字符串不包含 空格 和 換行 ,可以使用scanf() | fgets();
-
如果輸入的字符串需要包含 空格 和 換行 ,只能使用fgets();
-
經(jīng)過(guò)對(duì)比,我們發(fā)現(xiàn),在字符串的輸入中,fgets()更好;
字符串輸出
puts(數(shù)組名)
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char name[20];printf("請(qǐng)輸入您的姓名:\n");scanf("%s",name);puts(name);// 輸出 問(wèn)題?字符串如何拼接printf("您的姓名是:%s\n",name);return 0; }
-
printf("%s",數(shù)組名);
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char name[20];printf("請(qǐng)輸入您的姓名:\n");scanf("%s",name);printf("您的姓名是:%s\n",name);return 0; }
字符串拼接
-
strcat(數(shù)組名,"需要拼接的字符串") 注意:需要引入 #include <string.h>
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> #include <string.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char name[20];printf("請(qǐng)輸入您的姓名:\n");fgets(name,sizeof(name)/sizeof(char),stdin);// 輸入,返回地址puts(strcat(name," 跑著!"));// 拼接return 0; }
字符串拷貝
-
strcpy(數(shù)組名,字符串)
注意:需要引入 <string.h>庫(kù)
說(shuō)明:這個(gè)方法適合給字符串賦值用。
char str[16] = "馬杰克" // 初始化,正確 char str[16]; str[16] = "馬杰克" // 賦值,錯(cuò)誤 char str[16]; strcpy(str,"馬杰克") // 賦值,正確,結(jié)果:馬杰克
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> #include <string.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char name[20];printf("請(qǐng)輸入您的姓名:\n");scanf("%s",name);strcpy(name,"你好");printf("%s\n",name);// 輸出return 0; }
字符串比較
-
strcmp(字符串1,字符串2);
注意:
-
需要引入 <string.h>
-
返回的結(jié)果是boolean
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> #include <string.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char username[20];printf("請(qǐng)輸入您的賬戶:\n");scanf("%s",username);if(strcmp(username,"admin")){printf("賬戶輸入錯(cuò)誤!\n");}else{printf("賬戶輸入正確!\n");}return 0; }
獲取字符串長(zhǎng)度
-
strlen(字符串)
注意:
-
需要 <string.h>
-
返回字符串長(zhǎng)度
案例:
/* * 需求:字符數(shù)組-字符串的輸入輸出 */ #include <stdio.h> #include <string.h> int main() {// 創(chuàng)建一個(gè)變量,用來(lái)存放人的名字char username[20];printf("請(qǐng)輸入您的賬戶:\n");scanf("%s",username);// 獲取字符串長(zhǎng)度unsigned long len = strlen(username);if(strcmp(username,"admin")){printf("賬戶輸入錯(cuò)誤!%lu\n",len);}else{printf("賬戶輸入正確!%lu\n",len);}return 0; }