美文网首页
iOS开发技能树之C语言-数组、字符串

iOS开发技能树之C语言-数组、字符串

作者: 竹与豆 | 来源:发表于2018-04-27 14:39 被阅读5次

    数组基本定义

    数组可以用来存储一组有序的数据。数组是一块连续的、大小固定并且里面的数据类型一直的内存空间。

    1、 声明数组一般式:

    数据类型 数组名称[长度];
    
    int grades[20]; //声明一个能够存储20个int类型数据的数组。
    

    2、 初始化数组:

    1、数据类型 数组名称[长度n] = {元素1,元素2...元素n};//也可以只初始化一部分值 数据类型 数组名称[长度n] = {元素1,元素2};其余元素初始化为0
        int grades[3] = {1,2,3}; // int grades[3] = {1};
    2、数据类型 数组名称[] = {元素1,元素2...元素n};
        int grades[] = {1,2,3};
    3、数据类型 数组名称[长度n] ;数组名称[0]=元素1;数组名称[1]=元素2;数组名称[n-1]=元素n;
        int grades[3] ;
        grades[0]=1;grades[1]=2;grades[2]=3;
    

    数组在初始化的时候,数组内元素个数不能大于声明数组的长度。

    3、 数组取值

    数组是一组有序的数据结构,所以通过下标来取对应的值。

    数组名称[元素对应下标]
    

    1、数组下标从0开始,最后一个元素下标是数组长度n-1。即x号元素对应的是第(x+1)个元素。
    C语言中数组长度一旦声明,长度就是固定无法改变

    4、 数组遍历

    数组遍历就是采用循环的方式将数组中的每个元素遍历出来。前面集中循环的方式都可以用来遍历,但有点注意的地方:避免数组越界访问,即循环变量不要超出数组长度。

    C语言中的数组长度声明之后是固定的,并且C语言中没有计算数组长度的方法。

    int arra[10] = {1,4,4,6,7,8,9,12};
    for (int i = 0; i < 10; i ++) {
        printf("%d\n",arra[i]);
    }
    

    5、数组排序-冒泡排序

    升序排序为例:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。

    int grades[10] = {89,45,67,67,45,43,78,90,50,20};
    for (int i = 0; i < 10; i ++) {
        printf("%d ",grades[i]);
    }
        
    for (int i = 0; i < 9; i ++) {
        for (int j = i; j >= 0; j --) {
            if (grades[j] > grades[j+1]) {
                int temp = grades[j];
                grades[j] = grades[j+1];
                grades[j + 1] = temp;
            }
        }
    }
        
        
    printf("\n ---- 排序 ------\n");
    for (int i = 0; i < 10; i ++) {
        printf("%d ",grades[i]);
    }
    printf("\n");
    
    打印结果:
    89 45 67 67 45 43 78 90 50 20 
     ---- 排序 ------
    20 43 45 45 50 67 67 78 89 90 
    
    另外一种写法(原理一样):
    //    for (int i = 8; i >= 0; i --) {
    //        for (int j = 0; j <= i; j ++) {
    //            if (grades[j] > grades[j+1]) {
    //                int temp = grades[j];
    //                grades[j] = grades[j+1];
    //                grades[j+1] = temp;
    //            }
    //        }
    //    }
    
    

    多维数组

    • 一般定义式:
    数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n];
    
    
    • 初始化方法:
    1、数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n] = {{值1,...值n},{值1,...值n}...{值1,...值n},}; //必须制定列的维数,因为心痛会根据数组中元素的总个数来分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数
    
    2、数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n];
        数组名称[下标1][下标2]..[下标n] = 值;
    //必须同时指定行和列的维数。
    
    • 取值
      与一维数组一样通过下标取值,多为数组需要通过多个维度的下标值确定取值位置。
    int arr[3][3] = {
            {1,2,3},
            {4,5,6},
            {7,8,9}};
    int index = arr[0][0];
    

    同样每个维度上都不能越界。

    • 遍历
      通过嵌套循环实现多维数组的遍历。

    多维数组的每一维下标决不能越界。

    int arr[3][3] = {
            {1,2,3},
            {4,5,6},
            {7,8,9}};
    int i,j;
    int sum=0;
    for(i=0;i<3;i++)
    {
        for (j = 0; j<3; j++) {
            if (i == j || i == 2-j) {
                 printf("%d\n",arr[i][j]);
            }
        }
    }
    

    字符串数组

    字符串是由多个字符组合而成的一段话,C语言里没有办法直接定义字符串数据类型,不过可以用数组来定义我们所要的字符串。

    一般形式

    1、char 字符串名称[长度] = "字符串值";
        char name[] = "我是张三jun";
    2、char 字符串名称[长度] = {'字符1','字符2',...'字符n','\0'}; //必须以'\0'结束,'\0'表示字符串的结束标志,这种方式在数组中不能写中文
        char name[] = {'w','o',' ','s','h','i',' ','A','\0'};
    []中的长度可以省略。
    

    字符串函数

    • strlen(s) 计算字符串长度,只是计算字符串长度,不能计算其他类型数组长度
    printf("%ld",strlen("sss")); //3
    
    printf("%ld \n",strlen("语言"));//6
    
    • strcmp(s1,s2) 比较字符串,比较字符串的ASCII码值,返回结果:0-相等,1-s1>s2,-1-s1<s2
    char s1[] = "abc";
    char s2[] = "acb";
    printf("%d",strcmp(s1,s2)); //-1
    printf("%d",strcmp(s2,s1)); //1
    printf("%d",strcmp(s1,s1)); //0
    
    • strcpy(s1,s2) 字符串拷贝,拷贝后覆盖原来字符串且不能对字符串常量进行拷贝
    char s1[10] = "学习 ";
    char s2[] = "C语言";
    strcpy(s1,s2);
    printf("%s",s1);//C语言
    
    • strcat(s1,s2) 把字符串s2拼接到s1后,s1与s2内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串。
    char s1[10] = "学习 ";
    char s2[] = "C语言";
    
    strcat(s1,s2);
    printf("%s\n",s1); //学习 C语言
    
    • atoi(s1) 字符串转换为整数
    printf("%d\n",atoi("100")); //100
    printf("%d\n",atoi("aaa")); //0
    

    相关文章

      网友评论

          本文标题:iOS开发技能树之C语言-数组、字符串

          本文链接:https://www.haomeiwen.com/subject/ipwblftx.html