写这篇的目的是巩固一下二维数组和字符串的学习。
一、二维数组
1.多维数组的定义
2.二维(多维)数组的存储方式
上一级的每个存储单元均为下一级一维数组的首位地址,层级之间由指针相连,只有底层才存储数据。
例如三维A[3][4][4]
A值为A[0]地址
A[i]值为A[i][0]地址
A[i][j][k]的值才是存储数据的区域
3.二维数组初始化
数组包括二维数组的初始化的原则存在确定行数和列数的最小约束条件。可以是下标的方式,也可以是括号的方式,但必须能够确定行数和列数,没有完全填充的位置自动用0补齐:
初始化方式 | 样例 |
完整混乱元素,行列下标 | inta[3][3]={1,-,9} |
行括号(此时行数下表可以省略) | inta[3][3]={{1,2,3},{~},{~}} |
行数省略 | inta[][3]={{1,2,3},{~},{~}} |
部分元素,行列下表(其余填0) | inta[3][3]={1,2} |
行括号部分元素,行列下标 | inta[3][3]={{1,2},{4},{7,8,9}} |
行数省略(有行括号) | inta[][3]={{1},{4,5},{7,8,9}} |
二、字符数组
1.与(多维)数组的关系
一维字符串:名字“James”
二维字符串:一组名字“”,“”,…………
三维字符串:多组名字,以此类推…………
2.字符数组定义及其与字符变量char的关系
定义:(和数组一样,只是数据类型改变)
char str[10];——字符串
若为:char str;—字符
char变量的存储方式为字符变量ASCLL码
而字符数组即为将char变量组成数组成为字符串
重点:其中,字符串的有效字符末尾有结束标注\0,占一个存储位置。
3.字符数组初始化
逐个字符输入(单引号) | char str[10]={"c",'h',,,‘a’} |
句子加大括号 (双引号) | char str[10]={"HOW"} |
句子省略大括号 | char str[10]="HOW" |
注意事项:用字符串常量初始化时,自动加结束标志\0
4.字符串函数
(1)输入输出:for循环scanf_s("%c,地址")输入printf(“%c”,变量)输出(%c)
(2)字符串整体:(“%s”,地址或变量)
(3)get函数:()
(4)put函数:
(5)字符串连接函数strcat(str1,str2),2接在1后面
(6)字符串拷贝函数strcpy(str1,str2),2拷贝到1中
(7)字符串比较函数strcmp(“sta”,“stb”),从左到右诸葛比较,返回结果,第一个不同ascoll码比较大小,1>2返回正,1<2返回负。
(8)测长度:strlen(str1)=长度整数
三、问题寻找James
输入:五个名字
输出:找到含有“James”的名字
代码:
#include//输入输出
#include//暂停
#include//字符函数
int main() {
const int n = 20,m=5;//优先定义常量
char name[m][n]={ "Kate.James","James.Tan","Bull.Ben","Jimes.James ","James.Ting" };
char james[] = {"James"};//然后定义变量(比较操作中,字符变量只能和字符变量比)
int i, j,k, len = strlen("James");//算长度
for (i = 0; i < m; i++) {//逐个名字
for (j = 0; j < n-len; j++) {//找首字母
if (name[i][j] == james[0]) {
for (k = 0; k < len; k++) {//比较后面字母
if (name[i][j+k] != james[k]) {
break;
}
}
if (k == len) {
printf("%s has James\n", name[i]);
printf("%d\n",name);
printf("%d\n",name[i]);
}
}
}
}
system("pause");
return 1;
}