十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
參考:https://blog.csdn.net/weixin_44617968/article/details/117656810
數(shù)組中的幾個(gè)名詞數(shù)組,從字面上看,就是一組具有相同類型的數(shù)據(jù),在C語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。
int 為類型標(biāo)識
arr 為變量名稱
[10] 表示數(shù)組大小
{1,2,3} 表示初始化
如果初始化長度和定義時(shí)長度不一致,后面的默認(rèn)為0
案例代碼:
// int arr[10];
int arr[5] = {1,2,3}; // 定義并初始化數(shù)組
for(int i =0; i<5;i++)
{printf("%d \n",arr[i]); //輸出下標(biāo)對應(yīng)的數(shù)組
}
for(int i =0; i<5;i++)
{printf("%d \n",&arr[i]);
}
for(int i =0; i<5;i++)
{printf("%p \n",&arr[i]);// 輸出內(nèi)存地址
}
輸出為:
因?yàn)閿?shù)組在內(nèi)存中占用的字節(jié)數(shù)取決于其存儲的數(shù)據(jù)類型和數(shù)據(jù)的個(gè)數(shù)
數(shù)組所占用存儲空間 = 一個(gè)元素所占用存儲空間 * 元素個(gè)數(shù)(數(shù)組長度)
所以計(jì)算數(shù)組長度可以使用如下方法
數(shù)組的長度 = 數(shù)組占用的總字節(jié)數(shù) / 數(shù)組元素占用的字節(jié)數(shù)
案例代碼:
int ages[4] = {19, 22, 33, 13};
int length = sizeof(ages)/sizeof(int);
printf("length = %d", length);
輸出結(jié)果: 4
二維數(shù)組的含義二維數(shù)組包含行列,先行后列
int m = 5;
int n = 6;
int arr[5][6];
for(int i =0 ; ifor (int j =0;jprintf("%d-%d\t",i,j);
arr[i][j] = 1;
}
printf("\n");
}
for(int i = 0 ;i<5;i++)
{printf("%d",arr[i][2]);
}
輸出為:
int arr1[5][6];
int arr2[2][3] = { {1,2,3},
{3,2,1}
};
int arr3[2][3] = {{1,2,3},{3,2,1}};
//int arr4[][3]; //D:\cplusproject\數(shù)組\main.c|15|error: array size missing in 'arr4'|
//int arr5[2][];//D:\cplusproject\數(shù)組\main.c|16|error: array type has incomplete element type 'int[]'|
int arr6[][3]={1,2,3,4,5,6,7}; //3行3列 按照行去賦值
int nums = sizeof(arr6)/sizeof(int); //nums表示有多少個(gè)元素
int rows = nums/3; //rows表示有多少行
printf("當(dāng)前的二維數(shù)組有 %d 行 %d 個(gè)元素\n",rows,nums);
for(int i = 0;ifor(int j = 0;j<3 ;j++)
{printf("%d \t",arr6[i][j]);
}
printf("\n");
}
輸出為:
char c[] ={'I',' ','a','m','\0','h','a','p','p','y'}; // c[0]--c[9] ----c[10] 但是這里沒有 \0 ,就可能會導(dǎo)致亂碼
printf("%d \n",sizeof(c)/sizeof(char));
for(int i = 0;i<(sizeof(c)/sizeof(char))+1;i++)
{printf("%c \t \n",c[i]);
}
return 0;
}
輸出為:
參考:C語言字符函數(shù)
無字符串長度限制的字符串函數(shù)
1. strlen 計(jì)算字符串長度
2. strcpy 字符串拷貝
3. strcat 字符串追加
4. strcmp 字符串比較
有字符串長度限制的字符串函數(shù)
1. strncpy 字符串拷貝
2. strncat 字符串追加
3. strncmp 字符串比較
4. strstr 在字符串中查找另一字符串
5. strtok 切割字符串
6. strerror 解析錯誤碼
perror 解析錯誤碼,打印信息
字符操作函數(shù)
1. `isdigit` 判斷是否是數(shù)字字符
2. islower 判斷是否是小寫字符
字符轉(zhuǎn)換函
tolower 字符轉(zhuǎn)小寫
toupper 字符轉(zhuǎn)大寫
1. strlen 計(jì)算字符串長度strlen 函數(shù)的參數(shù)
size_t strlen ( const char * str );
2. strcpy 字符串拷貝strlne 是計(jì)算字符 ‘\0’ 之前所有字符的的個(gè)數(shù),不包括 \0
strlen 的函數(shù)返回值是 unsigned int 類型,無符號整形
strlen 的參數(shù)指向的字符串的結(jié)尾必須包涵 \0,字符串是以 \0作為結(jié)束標(biāo)志
strlen 的使用方法
strcpy 函數(shù)的參數(shù)
char* strcpy(char * destination, const char * source );
3. strcat 字符串追加strcpy 字符串拷貝的源字符串必須以 \0 為結(jié)束標(biāo)志
strcpy 會將源字符串中的 ‘\0’ 拷貝到目標(biāo)空間中
拷貝的目標(biāo)空間必須足夠大,拷貝后能夠存放字符串
strcpy 拷貝的字符串必須是可改變的,不能是常量字符串
strcpy 函數(shù)的使用
strcpy 里的第一個(gè)參數(shù)是拷貝的目標(biāo)空間,第二個(gè)參數(shù)是拷貝的內(nèi)容
strcat 函數(shù)的參數(shù)
char * strcat ( char * destination, const char * source );
strcat 字符串追加,是在字符串 A 后面在追加一個(gè)字符串 B
strcat 的源字符串必須以 \0 為結(jié)束標(biāo)志
strcat 的被追加的空間必須能夠存放的下追加的字符串
strcat 的源字符串必須是可改變的,不能是常量字符串
strcat 函數(shù)的使用
strcat(arr, arr2);
//strcat 函數(shù)追加會把 arr2 的所有字符串拷貝到arr1里,包括\0
arr2拷貝時(shí)會把a(bǔ)rr1 里的\0 覆蓋,所以 strcat 函數(shù)不能 字符串A 追加 字符串A
4. strcmp 字符串比較strcmp 函數(shù)的參數(shù)
int strcmp ( const char * str1, const char * str2 );
strcmp函數(shù)的判斷標(biāo)準(zhǔn)規(guī)定:
第一個(gè)字符串大于第二個(gè)字符串,則返回大于0的數(shù)字
第一個(gè)字符串等于第二個(gè)字符串,則返回0
第一個(gè)字符串小于第二個(gè)字符串,則返回小于0的數(shù)字
strcmp 是比較每個(gè)字符串的第一個(gè)字符, 如果相等,
則繼續(xù)比較下一對字符,直到字符不相等或到達(dá)終止空字符
有字符串長度限制的字符串函數(shù)
1. strncpy 字符串拷貝strncpy 函數(shù)的參數(shù)
char * strncpy ( char * destination, const char * source, size_t num );
strncpy 和 strcpy 函數(shù)的使用方法都差不多,只是多了一個(gè)參數(shù) size_t num
多出來的參數(shù)是來限制字符串拷貝的長度,增加了安全性
如果源字符串的長度小于num,則拷貝完源字符串之后,在目標(biāo)的后邊追加\0,直到num個(gè)
char * strncat ( char * destination, const char * source, size_t num );
3. strncmp 字符串比較和 strcat 函數(shù)使用的方法和規(guī)則都差不多,只是多了一個(gè)參數(shù) size_t num
num 這個(gè)參數(shù)代表需要追加幾個(gè)字符串
strncat 函數(shù)使用
strncmp 函數(shù)參數(shù)
int strncmp ( const char * str1, const char * str2, size_t num );
4. strstr 在字符串中查找另一字符串規(guī)則和 strcmp 同上
多出來的一個(gè)參數(shù)是用來要比較字符串的個(gè)數(shù)
strncmp 函數(shù)使用
比較3個(gè)字符串的大小
strstr 函數(shù)參數(shù)
char * strstr ( const char *str1, const char * str2);
5. strtok 切割字符串作用:在A 字符串中查找是否包含 B字符串
如果 A 中包含 B ,則返回 B 在 A 中首次出現(xiàn)的的地址。
否則返回空指針!
如果找到,返回的是字符串的地址,所以要用指針變量來接收
strtok 函數(shù)參數(shù)
char * strtok ( char * str, const char * sep );
6. strerror 解析錯誤碼第一個(gè)參數(shù)是一個(gè)字符串,它包含了0個(gè)或者多個(gè)字符
第二個(gè)參數(shù)是分割字符串,對第一個(gè)參數(shù)的字符串掃描,碰到了分割字符串中的任意一個(gè)
就把那個(gè)字符標(biāo)記成 ‘\0’ ,然后返回分割字符串之前的地址,并且保存它在字符串中的位置
strtok函數(shù)第二次查找的第一個(gè)參數(shù)為 NULL ,函數(shù)將在同一個(gè)字符串中被保存的位置開始,查找下一個(gè)標(biāo)記
如果字符串中不存在更多的分割字符,則返回 NULL 指針。
strtok函數(shù)會改變被操作的字符串,所以在使用strtok函數(shù)切分的字符串一般都是臨時(shí)拷貝的內(nèi)容并且可修改
strerror 函數(shù)參數(shù)
char * strerror ( int errnum );
perror 解析錯誤碼,打印信息在使用庫函數(shù)的時(shí)候,調(diào)用庫函數(shù)失敗時(shí),都會設(shè)置錯誤碼
C語言中有一個(gè)全局變量叫 errno,只要調(diào)用庫函數(shù)發(fā)生錯誤,就會把錯誤碼放到errno里
strerror 會把錯誤碼翻譯成對應(yīng)的錯誤信息
使用必須包涵頭文件
srerror的使用
返回的都是對應(yīng)的錯誤信息
perror 函數(shù)參數(shù)
void perror(const char* str);
字符操作函數(shù)perror 的頭文件是
perror 和 strerror 作用都是一樣的,不過strerror 沒有打印
perror 是把錯誤碼轉(zhuǎn)換成錯誤信息,在打印
函數(shù)名 如果參數(shù)符合下列條件就返回真(非0的數(shù)字)
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,換頁‘\f’,換行’\n’,回車‘\r’,制表符’\t’或者垂直制表符’\v’
isdigit 十進(jìn)制數(shù)字 0~9
sxdigit 十六進(jìn)制數(shù)字,包括所有十進(jìn)制數(shù)字,小寫字母a ~ f,大寫字母A ~ F
islower 小寫字母a~z
isupper 大寫字母A~Z
isalpha 字母 a ~ z 或大寫字符 A - Z
salnum 字母或者數(shù)字,az,AZ,0~9
ispunct 標(biāo)點(diǎn)符號,任何不屬于數(shù)字或者字母的圖形字符(可打?。?br />isgraph 任何圖形字符
isprint 任何可打印字符,包括圖形字符和空白字符
以上函數(shù)的頭文件:
函數(shù)使用示范:
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧