2015.08.17多维数组和字符串的访问

1、多维数组:每多一个维度,就会出现一个更大的容器去装裹之前的维度

注意:有几维就由几个for进行嵌套循环,通常使用一维和二维较多

定义二维数组的步骤: 类型修饰符 数组名[常量表达式1][常量表达式2] = {初始值};

2、 不管是几维数组,数组都是不能直接拿来运算,访问二维数组元素使用双下标

定义二位数组的时候可以不指定第一维的长度,但是必须要给定第二维得长度

行数 = 元素个数 除以 第二维长度  若没有余数,结果就是行数;若有余数,(结果+1)等于行数

3、元素个数 =各维数乘积;

4、字符串就是字符数组,字符串数组每一个元素都是字符串,字符串数组是一个二维数组; 以\0结尾的字符组就是字符串

########二维数组求每一行的平均值##########

总结:先定义数组和行的和(为了求平均数),两个for循环取数组的随机值并打印,然后进行和累加,最后在打印时把平均值表达式写在打印里。注意:(float)sum强转小数。sum清零操作一般放在最后的打印下面;

例题:定义一个四行五列的数组,初始值是0;随机赋值范围10~30;打印每一行的元素,并计算每一行的平均值

//    int sum = 0;//接受每一行的平均值
//    int a[4][5] = {0};
//    for (int i = 0; i < 4; i ++) {

//        for (int j = 0; j < 5; j ++) {        

//            //随机赋值
//            a[i][j] = arc4random_uniform(30 - 10 +1) +10;

//            printf("%d\t",a[i][j]);//打印结果           

//            sum += a[i][j];//累加       

//        }printf("\n");
//        printf("\nsum = %d 平均值 = %.2f\n",sum,(float)sum / 5);
//        //打印每一行的累加结果和每一行的平均值
//       

//        sum = 0;//累加结果清零

//}

总结:一维一个for循环,二维两个for嵌套循环,三维用三个for嵌套循环

5、*****************求二维数组中所有最大的元素,并输出所在行和列***************

 总结:先定义最大值,在进行两个for循环取得随机数组并打印,跟着if语句找出最大值;最后再遍历数组输出最大值,记得输出最大值是两个for输出;     

int max = -100;//赋给最大值

例题:有一个四行五列的数组,初始值为0;随机赋值[20 50 ],求所有元素中最大的元素,并输出所在的行和列

//    int a[4][5] = {0};
//    for (int i = 0; i < 4; i ++) {
//        for (int j = 0; j < 5; j ++) {//随机赋值并打印结果
//            a[i][j] = arc4random_uniform(50 - 20 +1) +20;
//            printf("%d\t",a[i][j]);

//            //根据条件找出最大值

//            if (max < a[i][j]) {//如果max小于数组中的元素,就把元素赋值给max

//                max = a[i][j];                

//            }          

//         }
//    }
//    //输出最大值和下标
//    for (int i = 0; i <4; i ++) {
//        for (int j = 0; j < 5; j ++) {
//           
//            if (max == a[i][j]) {
//                   printf("a[%d][%d] = %d\n", i,j,max);
//            }
//        }

//    }

6、 ∞∞∞∞∞∞∞∞∞∞∞∞求每一行的和∞∞∞∞∞∞∞∞∞∞∞∞∞

总结: 做题原则:行标和列标谁变化最快,就把谁作为内层for循环;

有个四行五列的数组,初始值为0,元素随机赋值[10 50 ] ,打印每一列的和

   int a[4][5] = {0};

//    for (int i = 0; i < 4; i ++) {
//        for (int j = 0; j < 5; j ++) {
//            //赋给随机值
//            a[i][j] = arc4random_uniform(50 - 10 + 1) + 10;
//            //打印结果

//            printf("%d\t",a[i][j]);           

//        }
//        printf("\n");
//    }
//    //求每一行的和,行变化比较快,所以控制行循环放到内层
//    //外层控制列
//    
//    int sum = 0;//接受每一列的和
//    //控制列
//    for (int i = 0; i < 5; i ++) {
//        //控制行

//        for (int j = 0; j < 4; j ++) {           

//            sum +=a[j][i];//注意下标的互换
//        }
//            //打印每一列的和
//           printf("sum = %d\n",sum);
//            sum = 0;

//        }

7、*********同理,每一列的和如下***************

总结:和每一行的和不同点在于注意下标的互换

有个四行五列的数组,初始值为0,元素随机赋值[10 50 ] ,打印每一列的和

//    int a[4][5] = {0};
//    for (int i = 0; i < 4; i ++) {
//        for (int j = 0; j < 5; j ++) {
//            //赋给随机值
//            a[i][j] = arc4random_uniform(50 - 10 + 1) + 10;
//            //打印结果

//            printf("%d\t",a[i][j]);            

//        }
//        printf("\n");
//    }
//    //求每一行的和,行变化比较快,所以控制行循环放到内层

//    //外层控制列  

//    int sum = 0;//接受每一列的和
//    //控制列
//    for (int i = 0; i < 5; i ++) {
//        //控制行

//        for (int j = 0; j < 4; j ++) {          

//            sum +=a[j][i];//注意下标的互换
//        }
//            //打印每一列的和
//           printf("sum = %d\n",sum);
//            sum = 0;

//        }

8、字符串的访问

//定义一个字符串数组

   char c4[4][10] = {"xiaoze","wutenglan","songdao","tianhaiyi"};

   char a5[][10] = {"jiateng","boduo","linzhiling"};//相当于c5[3][10];

//    //如何访问字符串数组的元素

//    char c6[][10] = {"jingkong","mingbu","macunxi"};

//    给字符串数组赋值的时候,字符串的长度一定要小于第二维长度 -1 ,目的是给\0留个空间

//    printf("%c\n",c6[0][4]);//访问字符串数组中的单个字符使用双下标%c

//    c6[0][4] = ‘i';

//    printf("%s\n",c6[0]);//访问字符串数组中的字符串使用单下标
//    printf("%s\n",c6[2]);
//    
//    strcpy(c6[0], "laoshi");

//    printf("%s\n",c6[0]);

//    //遍历输出字符串
//    //使用第一维的下标访问字符串数组
//    for (int i = 0; i < 3; i++) {
//        printf("%s\n",c6[i]);
//    }
//  //使用双下标打印字符串
//    //行
//    for (int i = 0; i < 3; i ++) {
//        //列
//        for (int j = 0; j < 10; j ++) {
//            if (c6[i][j] != '\0') {
//                printf("%c",c6[i][j]);
//            }else{
//                break;//碰到\0就结束内层循环
//            }
//            printf("%c",c6[i][j]);
//            }
//        printf("\n");

//    }

9、字符串输出最长的并排序

    //创建一个字符串数组(内容是你一圈的姓名),输出最长字符串的长度
//    char c7[4][20] = {"zhangsan","wanger","mazi"};
//    unsigned long length = 0;//记录最大长度
//    for (int i =0; i < 4; i ++) {
//        if (length < strlen(c7[i])) {//使用strlen计算字符串的长度
//            length = strlen(c7[i]);
//        }
//    }
//    printf("length = %lu\n",length);
//    //输出最长字符串
//    for (int i = 0; i < 4; i ++) {
//        if (length == strlen(c7[i])) {
//            printf("%s\n",c7[i]);
//        }
//    }
   要求 //对字符串升序排序
//    for (int i = 0; i < 4 - 1; i ++) {
//        for (int j = 0; j < 4 - 1 - i; j ++) {
//            //前一个字符串大于后一个字符串时交换位置
//            if (strcmp(c7[j],c7[j + 1]) > 0) {
//                char temp[20]= {0};
//                //使用字符串拷贝函数
//                strcpy(temp, c7[j]);
//                strcpy(c7[j], c7[j+1]);
//                strcpy(c7[j+1], temp);

//            }        

//        }
//    }
//    //输出打印查看结果
//    for (int i =0; i < 4; i ++) {
//        printf("%s\n",c7[i]);

//    }

10、    对字符串升序排序

总结:字符串的升序,注意比较字符串大小用strcmp,后用strcmp覆盖前者

创建一个字符串数组(内容是你一圈的姓名),输出最长字符串的长度

//    char c7[4][20] = {"zhangsan","wanger","mazi"};
//    unsigned long length = 0;//记录最大长度
//    for (int i =0; i < 4; i ++) {
//        if (length < strlen(c7[i])) {//使用strlen计算字符串的长度
//            length = strlen(c7[i]);
//        }
//    }
//    printf("length = %lu\n",length);
//    //输出最长字符串
//    for (int i = 0; i < 4; i ++) {
//        if (length == strlen(c7[i])) {
//            printf("%s\n",c7[i]);
//        }

//    }

      //升序排列。。。。。

//    for (int i = 0; i < 4 - 1; i ++) {
//        for (int j = 0; j < 4 - 1 - i; j ++) {
//            //前一个字符串大于后一个字符串时交换位置
//            if (strcmp(c7[j],c7[j + 1]) > 0) {
//                char temp[20]= {0};
//                //使用字符串拷贝函数
//                strcpy(temp, c7[j]);
//                strcpy(c7[j], c7[j+1]);
//                strcpy(c7[j+1], temp);

//            }         

//        }
//    }
//    //输出打印查看结果
//    for (int i =0; i < 4; i ++) {
//        printf("%s\n",c7[i]);

//    }

时间: 2024-10-15 21:21:01

2015.08.17多维数组和字符串的访问的相关文章

c++-怎么用二维数组储存字符串

问题描述 怎么用二维数组储存字符串 类似于杨辉三角或者是ABCDEF环绕成正方形打印我想看能不能用二维数组控制他们循环打印数字我用二维数组能控制循环,但不知怎么在二维数组里储存字符串,是用数组指针吗?大神们能给个杨辉三角但是数学换成字符串的例子吗?类似图中用二维数组做怎么表示 解决方案 字符串转成二维数组C#二维数组及字符串操作C++ 字符串和二维数组索引 解决方案二: http://blog.csdn.net/qq_27183003/article/details/49699463http:/

PHP实现多维数组转字符串和多维数组转一维数组的方法_php技巧

本文实例讲述了PHP实现多维数组转字符串和多维数组转一维数组的方法.分享给大家供大家参考.具体实现方法如下: /** * @method 多维数组转字符串 * @param type $array * @return type $srting * @author yanhuixian */ function arrayToString($arr) { if (is_array($arr)){ return implode(',', array_map('arrayToString', $arr)

2013级C++第15周项目——二维数组

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-折腾二维数组]创建一个长度为5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后通过键盘输入,使后两列的10个元素获得值,将所有元素值乘以3后保存在数组中.输出数组时,按行序优先输出,再按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"转置"),再将数组"倒"着输出(即最后一行最后一列的最先输

二维数组-关于C语言的指针数组的问题

问题描述 关于C语言的指针数组的问题 老师说过 传递一个二维数组时 必须指定 第二维的 个数 才能正确索引 数组1维+1的位置 函数参数传递 都是写成这样 abc(int* array[10]) 但是看到main函数的 参数确是 int main(int argc, char* argv[], char* env[]) 这样写 能索引argv+1 的位置吗? 解决方案 当然可以,C语言是一种简陋和原始的语言,它简陋的程度对于用惯了高级编程语言的人来说匪夷所思,比如你完全可以越界访问数组,至于结果

数据结构 有关多维数组的问题

问题描述 数据结构 有关多维数组的问题 int main(){ nArray A(2, 3, 4); } /******************************/ template class nArray{ private: aElem* base; int dim; int * bounds; int * constants; private: Status Locate(va_list, int&); public: nArray(int, ...); ~nArray(){ if

php二维数组转成字符串示例

 这篇文章主要介绍了php二维数组转成字符串示例,需要的朋友可以参考下    代码如下: function arr2str ($arr) {     foreach ($arr as $v)     {         $v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串         $temp[] = $v;     }     $t="";     foreach($temp as $v){         $t.

c++-C++ 字符串 转 二维数组

问题描述 C++ 字符串 转 二维数组 CString aa = "11<225>22<225>33<225>44<000>aa<225>bb<225>cc<225>dd<000>ee<255>ff<255>hh<000>"想转为二维数组 求代码 学习 想转为二维数组 求代码 学习 解决方案 // app1.cpp : Defines the entry

求助,字符串转成多维数组,在线等,谢谢

问题描述 如何把"1,2,3@4,5,6"此类格式的字符串转化成多维数组??初学者,要具体代码,谢谢 解决方案 解决方案二:vars="1,2,3@4,5,6";varres=s.Split('@').Select(x=>x.Split(',')).ToArray(); 解决方案三:string[]arr1=sr.ReadLine().Split(newchar[]{'@'},StringSplitOptions.RemoveEmptyEntries);for

改写函数实现PHP二维/三维数组转字符串_php技巧

由于工作需要,自己在手册给定的示例函数基础上改写出了这样一个函数,代码如下: 复制代码 代码如下: //将多维数组中所有的数值转换成字符串---->最多支持三维数组 function implodex( $glue, $array, $separator='' ) { if ( ! is_array( $array ) ) return $array; $string = array(); $count = 0; foreach ( $array as $key => $val ) { if