為什麼要使用陣列
當大量同類型資料需要儲存時,就必需使用陣列
陣列宣告
int score[3]
超出範圍,會產生不可預期的當機
陣列初始值
int score[]={1,2,3,4,5};
int score[5]={0};
使用迴圈設定陣列
分別設定score, 使用for加總後算出平均值
一維陣列空間大小
sizeof(a) : 是算出整個陣列的大小
氣泡排序法
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; void getData(int *); void printData(int *); void sort(int *); int n=30000; int main(){ int *d=new int[n]; getData(d); //printData(d); timespec t1, t2; clock_gettime(CLOCK_REALTIME, &t1); sort(d); clock_gettime(CLOCK_REALTIME, &t2); //printData(d); printf("總花費時間 : %0.3f 微秒", ((t2.tv_sec-t1.tv_sec)*1000000000+(t2.tv_nsec-t1.tv_nsec))/1000.0f); } void getData(int *d){ srand(time(NULL)); for (int i=0;i<n;i++){ d[i]=rand(); } } void printData(int *d){ for (int i=0;i<n;i++){ printf("%d ", d[i]); } printf("\n"); } void sort(int *d){ for (int i=0;i<=n-2;i++){ for (int j=i+1;j<=n-1;j++){ if (d[i]>d[j]){ int tmp=d[i]; d[i]=d[j]; d[j]=tmp; } } } }
字元陣列
字元陣列類似字串,但字串最後會加入 \0, 用sizeof時 \0不會計算
宣告 :
char str[]={‘h’, ‘e’,’l’,’l’,’o’};
char str[]=”123456″;ç自動加 \0, 總長度是7
printf(“%s\n”,str);ç不用使用c_str(),因為char是基本型態,沒有c_str的函數
用此方法後,str=”abcd”會錯誤,
需使用strcpy(str, “123456”),此需include <string.h>
string a=”abcd”;
printf(“%s\n”, a.c_str()); çstring需使用c_str()轉成字元陣列。%s是印字元陣列
中文字元陣列
char str[]=”這是abc”; strlen(str)的結果是7, 取出中文字時,一定要取2byte, 不然會變成亂碼
中英文混雜時,就要先判斷char 是否大於127, 若是的話,就是中文,需再緊接取第二個字元
char str[]=”這是abc”;
for(int i=0;i<strlen(str);i++){ if((int)str[i]<0){ printf("%c%c\n", str[i], str[i+1]); i++; } else{ printf("%c\n", str[i]); } }
多維陣列宣告
int score[500][11], 共500列,11行
int t[5][4]={0}; for (int i=0;i<5;i++){ for (int j=0;j<4;j++){ printf("%d ", t[i][j]); } printf("\n"); }
二維字元陣列
char s[3][5]={“abcd”, “efgh”,”ijkl”}; ç3可以省略,但5絕對不能省
for (int i=0;i<3;i++){ printf("%s\n", s[i]); }
由此說明每個字串長度都一樣,所以需要指標