八字符串数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八字符串数组相关的知识,希望对你有一定的参考价值。
1.用于存放字符变量的数组称为字符数组
2.字符数组属于一维数组,类型char
3.字符串数组:是存放字符串的数组
4.字符串数组定义:
char 数组名[常量表达式1][常量表达式2] = {值1,值2,...};
chat strings[3][10] = {"iphone","android","win8"};包含三个字符串
5.字符串数组本质就是字符型二维数组。一个包含多个字符数组的数组
6.字符数组,行代表的是每个字符串,列代表的是字符串中的字符。
7.数据访问:
(1)访问某个字符串。数组名[第一维下标]
(2)访问某个字符。数组名[第一维下标][第二维下标]
8.每个字符串长度,不可超过第二维长度-1,因为有\0
9.每个字符串用数组名加一维下标表示
例如strings[0]代表第一个字符串
10.注意:字符串数组进行输入的时候,不适用“&”
11.多维数组
12.当数组下标在2个或者2个以上时,该数组称为多维数组。
例如:
int a[2][3][4]; 表示整型的三维数组,2层4行3列
13.元素个数 = 2*3*4
14.三维数组的赋值运算
for(int i = 0 ; i < 层数 ;i ++){
for(int j = 0 ; j < 行数 ; j ++){
for(int k = 0 ; k < 行数; k ++){
}
}
for(int j = 0 ; j < 行数 ; j ++){
for(int k = 0 ; k < 行数; k ++){
}
}
}
15.注意事项
(1)多维数组理论上位数可以任意
(2)多维数组的元素个数 = 各维数 个数 乘积
(3)多维数组占用内存 = 元素个数 乘以 单个元素所占空间
//字符串中修改字符,字符串。打印字符和字符串
// char strings[3][10] = {"iPhone","iTouch","iPad"};
// strcpy(strings[0], "Mac book");//修改字符串
// strings[0][2] = ‘Q‘;//修改字符
// printf("%s",strings[0]);//打印iTouch
// printf("\n");
// printf("%c",strings[0][4]);//打印第一个字符iPhone中的第四个字符o
// printf("\n");
//请输入三个单词,判断哪个最大,并确定位置
// char strings[3][20] = {0};
// unsigned long maxLength = 0;
// int index = 0;
// printf("请输入三个单词,并用空格隔开:");
// scanf("%s%s%s",strings[0],strings[1],strings[2]);//输入三个字符
// for (int i = 0; i < 3; i ++) {
// unsigned long length = strlen(strings[i]);//定义长度
// if (maxLength < length) {//如果上一个字符串长度小于下一个字符长度
// maxLength = length;//拷贝为最大长度
// index = i;//纪录当前i的次数,即第几个最大
// }
// }
// printf("%s是最长单词,长度是%lu\n",strings[index],maxLength);
//手机通讯录里有10个人的名字(英文),从大到小排序
// char names[5][20] = {"doudou","chifan","shuijiao","dadoudou","zhangsan"};
// for (int i = 0; i < 5 - 1; i ++) {//冒泡排序法,控制趟数
// for (int j = 0; j < 5 - 1 - i; j ++) {//控制该趟比较次数
// if (strcmp(names[j], names[j+1]) > 0) {//字符比较,用strcmp函数
// char temp[20] = {0};//定义一个空数组,用于中间变量的数值的接收
// strcpy(temp, names[j]);//字符串复制,用strcpy函数
// strcpy(names[j], names[j+1]);
// strcpy(names[j+1], temp);
// }
// }
// }
// for (int i = 0; i < 5; i ++) {//for循环输出
// printf("%s\n",names[i]);
// }
//输入6个字符串,并对他们按从小到大排序
// char strings[6][20] = {0};
// printf("请输入6个字符:");
// scanf("%s%s%s%s%s%s",strings[0],strings[1],strings[2],strings[3],strings[4],strings[5]);
// for (int i = 0; i < 6 - 1; i ++) {
// for (int j = 0; j < 6 - 1 - i; j ++) {
// if (strcmp(strings[j], strings[j+1]) > 0) {
// char temp[20] = {0};
// strcpy(temp, strings[j]);
// strcpy(strings[j], strings[j+1]);
// strcpy(strings[j+1], temp);
// }
// }
// }
// for (int i = 0; i < 10; i ++) {
// printf("%s\n",strings[i]);
// }
//随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组里
// char strings[3][4][5] = {0} , resStrings[4][5] = {0};
// for (int i = 0; i < 3 ; i ++) {
// for (int j = 0; j < 4; j ++) {
// for (int k = 0; k < 5; k ++) {
// strings[i][j][k] = arc4random()%(100 - 10 + 1) + 10;
// printf("%d ",strings[i][j][k]);
// }
// printf("\n");
// }
// printf("\n");
// }
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// resStrings[i][j] = (strings[0][i][j] + strings[1][i][j] + strings[2][i][j]) / 3 ;
// }
// }
// printf("------输出深度------\n");
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// printf("%d ",resStrings[i][j]);
// }
// printf("\n");// } /*找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有鞍点),打印出相关信息*/// char strings[4][5] = {0};// for (int i = 0; i < 4; i ++) {// for (int j = 0; j < 5; j ++) {// strings[i][j] = arc4random()%(100 - 10 + 1) + 10;// printf("%d ",strings[i][j]);// }// printf("\n");// }// printf("-----------------------------\n");// int max = 0 , min = 0;// int jMax = 0 , iMin = 0;// for (int i = 0; i < 4; i ++) {// for (int j = 0; j < 5; j ++) {//该行中最大// if (max < strings[i][j]) {// max = strings[i][j];// jMax = j;// //iMin = i;// }// }// min = strings[0][jMax];// for (int i = 1; i < 4; i ++) {//该列中最小// if (min > strings[i][jMax]) {// min = strings[i][jMax];// iMin = i;// }// }// if (max == min) {// printf("i=%d j=%d 鞍点=%d \n",iMin,jMax,max);// }// //i = iMin;
// char strings[3][10] = {"iPhone","iTouch","iPad"};
// strcpy(strings[0], "Mac book");//修改字符串
// strings[0][2] = ‘Q‘;//修改字符
// printf("%s",strings[0]);//打印iTouch
// printf("\n");
// printf("%c",strings[0][4]);//打印第一个字符iPhone中的第四个字符o
// printf("\n");
//请输入三个单词,判断哪个最大,并确定位置
// char strings[3][20] = {0};
// unsigned long maxLength = 0;
// int index = 0;
// printf("请输入三个单词,并用空格隔开:");
// scanf("%s%s%s",strings[0],strings[1],strings[2]);//输入三个字符
// for (int i = 0; i < 3; i ++) {
// unsigned long length = strlen(strings[i]);//定义长度
// if (maxLength < length) {//如果上一个字符串长度小于下一个字符长度
// maxLength = length;//拷贝为最大长度
// index = i;//纪录当前i的次数,即第几个最大
// }
// }
// printf("%s是最长单词,长度是%lu\n",strings[index],maxLength);
//手机通讯录里有10个人的名字(英文),从大到小排序
// char names[5][20] = {"doudou","chifan","shuijiao","dadoudou","zhangsan"};
// for (int i = 0; i < 5 - 1; i ++) {//冒泡排序法,控制趟数
// for (int j = 0; j < 5 - 1 - i; j ++) {//控制该趟比较次数
// if (strcmp(names[j], names[j+1]) > 0) {//字符比较,用strcmp函数
// char temp[20] = {0};//定义一个空数组,用于中间变量的数值的接收
// strcpy(temp, names[j]);//字符串复制,用strcpy函数
// strcpy(names[j], names[j+1]);
// strcpy(names[j+1], temp);
// }
// }
// }
// for (int i = 0; i < 5; i ++) {//for循环输出
// printf("%s\n",names[i]);
// }
//输入6个字符串,并对他们按从小到大排序
// char strings[6][20] = {0};
// printf("请输入6个字符:");
// scanf("%s%s%s%s%s%s",strings[0],strings[1],strings[2],strings[3],strings[4],strings[5]);
// for (int i = 0; i < 6 - 1; i ++) {
// for (int j = 0; j < 6 - 1 - i; j ++) {
// if (strcmp(strings[j], strings[j+1]) > 0) {
// char temp[20] = {0};
// strcpy(temp, strings[j]);
// strcpy(strings[j], strings[j+1]);
// strcpy(strings[j+1], temp);
// }
// }
// }
// for (int i = 0; i < 10; i ++) {
// printf("%s\n",strings[i]);
// }
//随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组里
// char strings[3][4][5] = {0} , resStrings[4][5] = {0};
// for (int i = 0; i < 3 ; i ++) {
// for (int j = 0; j < 4; j ++) {
// for (int k = 0; k < 5; k ++) {
// strings[i][j][k] = arc4random()%(100 - 10 + 1) + 10;
// printf("%d ",strings[i][j][k]);
// }
// printf("\n");
// }
// printf("\n");
// }
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// resStrings[i][j] = (strings[0][i][j] + strings[1][i][j] + strings[2][i][j]) / 3 ;
// }
// }
// printf("------输出深度------\n");
// for (int i = 0; i < 4; i ++) {
// for (int j = 0; j < 5; j ++) {
// printf("%d ",resStrings[i][j]);
// }
// printf("\n");// } /*找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有鞍点),打印出相关信息*/// char strings[4][5] = {0};// for (int i = 0; i < 4; i ++) {// for (int j = 0; j < 5; j ++) {// strings[i][j] = arc4random()%(100 - 10 + 1) + 10;// printf("%d ",strings[i][j]);// }// printf("\n");// }// printf("-----------------------------\n");// int max = 0 , min = 0;// int jMax = 0 , iMin = 0;// for (int i = 0; i < 4; i ++) {// for (int j = 0; j < 5; j ++) {//该行中最大// if (max < strings[i][j]) {// max = strings[i][j];// jMax = j;// //iMin = i;// }// }// min = strings[0][jMax];// for (int i = 1; i < 4; i ++) {//该列中最小// if (min > strings[i][jMax]) {// min = strings[i][jMax];// iMin = i;// }// }// if (max == min) {// printf("i=%d j=%d 鞍点=%d \n",iMin,jMax,max);// }// //i = iMin;
// }
以上是关于八字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
左神算法第八节课:介绍递归和动态规划(汉诺塔问题;打印字符串的全部子序列含空;打印字符串的全排列,无重复排列;母牛数量;递归栈;数组的最小路径和;数组累加和问题,一定条件下最大值问题(01背包))
2021-07-27:给定一个数组arr,长度为N,arr中的值只有1,2,3三种。arr[i] == 1,代表汉诺塔问题中,从上往下第i个圆盘目前在左;arr[i] == 2,代表汉诺塔问题中,从上