07 数组 您所在的位置:网站首页 字符串数组定义方式 07 数组

07 数组

2023-07-13 05:03| 来源: 网络整理| 查看: 265

数组

在C语言里,数组(Array)可以表示一组数据 例如,数组是构造数据类型之一

数组: 有序数据的集合,用数组名标识 元素: 属同一数据类型,用数组名和下标确定

一维数组 一维数组的定义 定义方式:

例: int a[6]

一维数组的引用

1、数组必须先定义,后使用。

2、只能逐个引用数组元素,不能一次引用整个数组。

3、数组元素表示形式: 数组名[下标] ,下标可以是常量或整型表达式。

4、调用数组元素的 三种 方法: 下标法 、 数组名法 、 指针法

引用方式: #include int main() { int a[] = { 1,2,3,4,5 }, i, * p; printf("用下标引用数组元素:\n"); for (i = 0; i < 5; i++) printf("%d\n", a[i]); printf("用数组名引用数组元素:\n"); for (i = 0; i < 5; i++) printf("%d\n", * (a+i)); printf("用指针引用数组元素:\n"); for (p = a; p < a+5; p++) printf("%d\n", * p); return 0; } 一维数组的初始化 初始化方式:

说明:

1、数组不初始化,其元素值为随机数。

2、对static数组元素不赋初值,系统会自动赋以0值。

3、只给部分数组元素赋初值。

4、当全部数组元素赋初值时,可不指定数组长度。

程序举例

例1: 读10个整数存入数组,找出其中最大值和最小值

/*示例1*/ #include #define SIZE 10 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i{2}, {4}};

  此语句表示只给第一行第一个元素赋值为2,第二行第一个元素赋值为4,而其他元素都为0。

int a [2] [3] = {{1, 2, 3}};

  此语句表示只给第一行三个元素分别赋值为:1、2、3。

int a [2] [3] = {{},{1, 2, 3}};

  此语句表示只给第二行三个元素分别赋值为:1、2、3。

(4)定义数组时对第一维的长度可以不定义,但必须定义第二维的长度

int a [] [3] = {1, 2, 3, 4, 5, 6};

系统会根据输入的总个数分配存储空间,易知这个二维数组有二行;

  再如:

字符数组 字符数组的定义

定义 : 每个元素存一个字符,主要用来对字符串操作。

这是定义了一个长度为 80 的一维字符数组。

char line [80];

这是定义了一个 2 行 3 列的二维字符数组。

char line [2][3]; 字符数组的初始化:

1、逐个字符赋值2、用字符串常量

字符的初始化方法可以分为两种:

(1) 将字符逐个赋给数组中的每个元素;

char c [5] = {'c', 'h', 'i', 'n', 'a'};

这是把5个字符分别赋给 c [0] ~ c [4] 这 5 个元素中。

(2) 直接用字符串常量给数组赋初值。

char c [6] = "china";

为什么使用只有5个字符前面写着 6 。

当括号里面写成 5 时,程序就会被报错!如图:

当括号里面写成 6 时,程序就会正常!如图:

无论用以上哪种方法进行初始化,如果提供的字符个数大于数组长度,系统就会进行语法错误处理,比如上面的情况;如果提供的字符个数小于数组长度,则只会给前面几个元素赋值,剩下的自动设置为0,即 ’\0‘。

例:

char a [10] = {'c', 'h', 'i', 'n', 'a'};

这里定义了10个长度,但只给 5 个元素赋值,那么这个数组的状态就会是:

C语言约定用'\0'作为字符串的结束标志,它占内存空间。这里的"china"的有效长度为 5 ,但实际上还有第 6 个字符'\0'。

也就是说,当遇到'\0'时,表示字符串结束,由它前面的字符组成字符串。

在程序中,常用'\0'来判断字符串是否结束,因此所定义的字符数组长度应该大于字符串的实际长度,这样才足以存放相应的字符串,这就是前面为什么写 6 而不是 5 的原因

注意:'\0'是代表ASCII码值为 0 的字符,是一个不可显示的字符,表示一个“空字符”,也就是说它什么也没有,只是一个可供识别的标志。

字符数组的输入和输出 赋值语句

注意,赋值 ≠ 初始化!

和整型数组等一样,字符数组是不能用赋值语句整体赋值,如下代码是错误的!!!

char str [12]; str [12] = "the string"; ✘

对于一般数组而言,输入和输出的时候只能对数组元素一个一个进行;

而对于字符数组它不仅可以逐个输入输出,还可以整体输入输出

1.逐个字符输入/输出

① 使用 scanf 进行输入,使用 printf 进行输出,这个时候,要使用格式符 “%c”;

for (i = 0; i < 10; i++) scanf ("%c", &str [i]); //逐个输入 for (i = 0; i < 10; i++) printf ("%c", str [i]); //逐个输出

②使用 getchar() 和 putchar() 函数。

for (i = 0; i < 10; i++) str [i] = getchar (); //逐个输入 for (i = 0; i < 10; i++) putchar (str [i]); //逐个输出 2.字符串整体输入输出

①使用 scanf 进行输入,使用 printf 进行输出,这个时候,要使用格式符 “%s”;

char str [6]; scanf ("%s", str) //整体输入 printf ("%s", str) //整体输出

注意:scanf 中的 str 代表 str 这个字符数组的首地址,因此不加“&”!输入时系统会自动在字符串结尾加上结束符 '\0'。也可以同时输入多个字符串,这个时候输入的时候要用空格或者回车符号分隔开。

② 用字符串处理函数 gets() 进行字符串整串的输入,puts() 进行字符串整串的输出

3.总结:

(1)输出字符不包括'\0';

(2)用格式符"%s"时,输出项应该是数组名,不是数组元素;

(3)当数组长度大于字符串实际长度时,也只能输出到'\0'结束;

(4)如果数组中包含一个以上的’\0‘时,遇到第一个’\0‘时结束输出,比如:

字符串函数

C语言有一批字符串处理函数,其中 gets() 和 puts() 函数包含在头文件中,其余的包含在中。

常用的 8 个字符串函数: 1.gets()整行输入函数

一般形式:gets(字符数组),例如:

gets (str);

 执行这个语句时,gets函数从键盘读入一串字符,直至遇到换行符’\n‘为止;

 字符串输入后,系统会自动用'\0'置于字符串的尾部,以替代换行符。

2.puts()整行输出函数

一般形式:puts(字符数组),例如:

char str [] = "string"; puts (str);

 这个函数的作用是将字符串中的内容显示在屏幕上,直到遇到第一个字符串结束符'\0'时。停止输出并自动换行。

用puts函数输出的字符串中可以出现转义字符,用于实现某种格式的控制。例如:

3.strlen()字符串长度函数

一般形式:strlen(字符数组),例如:

char str[]="string"; strlen (str); strlen ("string");

 该函数用于统计字符串开始到’\0‘的有效长度。

4.strcat()字符串连接函数

 一般形式:strcat(字符数组1, 字符数组2),例如:

char str1 [15]= "I am "; char str2 [] = “student”; strcat (str1, atr2);

这个函数的作用是将字符数组 2 连接在字符数组 1 上,就像嫁接一样。

连接前后的情况如下:

连接前连接后str1I am \0\0\0\0\0\0\0\0\0\0I am student\0\0\0str2student\0student\0

 注意:字符数组1的长度要足够大

5.strcpy()字符串复制函数

 一般形式:strcpy(字符数组1, 字符数组2),例如:

char str[10]; strcpy (str, "china");

注意:

在向字符数组1中复制(或者“赋值”)时,字符数组2中的结束标志'\0'也被复制过去了,比如:

复制前复制后str1abcdefg\0&&&\0efg\0srr2&&&\0&&&\0

 复制后的str1中出现了两个'\0',则用 "printf("%s", str1)" 和 “puts(str1)” 输出时,只会输出“&&&”。

6.strcmp()字符串比较函数

 一般形式:strcmp(字符数组1, 字符数组2)

 规则:

 对两个字符串自左向右逐个字符进行比较——按ASCII码值大小比较,直到出现不同字符或者遇到'\0'为止。

 注意:这里比较是ASCII码值!

 如果全部字符都相同,则认为相等;

 若出现不同的字符,则以第一个不同的字符的比较结果为准;

  ● 如果字符串1 = 字符串2,函数值为 0;

  ● 如果字符串1 > 字符串2,函数值为一正数;

  ● 如果字符串1 < 字符串2,函数值为 一负数;

7.strlwr()字符串中的大写字母换成小写字母函数

strlwr中的“lwr”是lowercase(小写)的缩写,运用很简单,如图:

8.strupr()字符串中的大写字母换成小写字母函数

strupr中的“upr”是uppercase(大写)的缩写。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有