C语言 ——— 数组 和 字符串

一、数组 

  • 构造数据类型之一。
  • 数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量成为数组的元素。
  • 数组中个元素的数据类型要求相同,用数组名和下标来确定。数组是一维的,也可以是多维的。

1、一维数组

     i、数组名表示内存首地址,是地址常量。---------------Sizeof(数组名)是数组占用的总内存空间。

    ii、编译时分配的内存:内存字节数 = 数组维数 *sizeof(元素数据类型)

    iii、C语言对数组不作越界 检查,使用时要注意。

一维数组的引用:

  • 数组必须先定义,在引用。
  • 只能逐个引用数组元素,不能一次引用整个数组。
  • 数组元素表达式:数组名[下标]------下标可以时整型以及整型表达式。

一维数组的初始化:

  • 初始化方式:在定义数组时。为数组元素赋初值---------int a[5] ={1,2,3,4,5};

       i、数组如果只给部分赋值,其他的值默认为0;

      ii、数组不初始化,其元素值随机数;

     iii、对static 数组元素,系统默认赋值为0;

注:对地址的 访问 printf("%p \r\n",&a[i]) ;

2、二维数组

  • 定义方式 :数据类型  数组名[常量表达式][常量表达式] --------- 例子 :int a[4][2]   float  a[3][3]
  • 数组元素是顺序存放的,因为内存是一维的---------二维数组中 按行序优先
  • 二维数组  可通过一维数组来理解 例如 :int a[4][2]  ----- 可以看为 有四个元素的一维数组a[4] ,每个元素下又有四个元素。

3、多维数组

定义:具有两个或则两个以上下标的数组称为 多维数组。例如 : int a[3][2][1] 

题目 : 打印杨辉三角的前十行。

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10  10  5 1

.........................

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int a[10][10] = {{0}};
	int i,j;

	for(i=0;i<10;i++)
	{
		a[i][0] = 1;
		for(j=1;j<=i;j++)
			a[i][j] = a[i-1][j-1] + a[i-1][j];
	}
	for(i=0;i<10;i++)
	{
		for(j=0;j<=i;j++)
		{
			printf("%-8d ",a[i][j]);
		}
		putchar('\n');
	}
	return 0;
}

4、字符数组 

定义:字符数组是 元素 的数据类型位字符类的数组。

            --- char c[10] , ch[3][4]

字符数组的初始化:i、逐个字符赋值     ii、用字符串常量

例如 :char ch[5] = {‘a’,‘b’,‘c’,‘d’,‘e’,}   ,  char ch[] = "hello";

 

二 、字符串

  • 在C语言中,无字符串变量,用字符数组处理字符串。
  • 字符串结束标志:‘\0’

例子  : char diamond[][7] = {"azfhv","etyy","sdert","ssaa","ghd","dfg","asd"};

在二维数组中如何计算 有几行,有几列: 行数 = 总空间/一行空间大小(每一行的大小分配时是一样的)

                                                                列数 = 一行空间大小 /每个字符大小。

  • 打印字符串时最好 一个一个字符打印出来,以免出现错误。

题目 : 输入一个字符串,将其逆序输出。

#include <stdio.h>
int main(int argc, const char *argv[])
{
	char ch2[10];

    printf("请输入少于十个字符的 字符串 : ");
    scanf("%s",ch2);

    
	for(i=10-1;i>=0;i--)
	{
        printf("%c",ch2[i]);
	}
    printf("\r\n");

	return 0;
}
  • 字符串函数(API)

----- c语言中实现了很多字符串处理函数 

  #include <string.h>

几个常见的字符串处理函数:

1、求字符串长度的函数 -------------------  strlen (字符串1)

      返回值:字符串的长度,其长度不包括 该字符串的结束符。

2、字符串拷贝 函数 strcpy(字符数组1,字符串2)

功能:将字符串2 ,拷贝到字符数组1中去。

返回值:返回字符数组1 的首地址。

说明:

         字符数组1必须足够大。

         拷贝时‘\0’一起拷贝。

3、字符串连接函数 ---------------- strcat(字符数组1,字符数组2)

功能:把字符数组2 连到字符数组1的后面。

返值:返回字符数组1 的首地址。

说明:

         字符数组1 必须足够大。

         连接前两串均以‘\0’结束;连接后,串1的‘\0’取消,新串最好加入'\0'。

如果,连接的两者不是两个字符串,则出现的结果将完全不确定。

4、字符串比较函数-------------- strcmp(字符串1,字符串2)

功能:比较两个字符串

比较的规则:对两个字符串从左到右逐个比较(ASCII码),直到遇到不同字符或 ‘\0’为止。

返值:返回int 型整数。

a、若字符串1 < 字符串2 ,返回负整数。

b、若字符串1 > 字符串2 ,返回正整数。

c、若字符串1 == 字符串2 ,返回零。

 

不是太常见  字符串处理函数:

4、复制指定长度字符串-------------- strncpy(p , p1 , n)

    功能:字符串p1中复制n个字符到 字符串p中 ---------  从头开始拷

    例如 :p={"zhou"};p1 = {"bo"}        strncpy(p , p1 , 2)  ------------>  p = {"boou"} 

5、附加指定长度到字符串-------------- strncat(p , p1 , n)

功能:字符串p1中复制n个字符到 连接到 字符串p的后面 。

例如 :p={"zhou"};p1 = {"bo"}        strncat(p , p1 ,1)  ------------>  p = {"zhoub"} 

6、忽略大小写比较字符串-------------- strcasecmp(p , p1)

7、比较指定长度字符串-------------- strncmp(p , p1 , n)

8、在字符串中查找指定字符-------------- strchr(字符串p , 字符c)

返回值:第一次查到的字符在字符串中的地址;没找到则返回空。

     在字符串中查找指定字符-------------- strrchr(字符串p , 字符c)

    返回值:最后一次查到的字符在字符串中的地址;没找到则返回空。

9、查找字符串-------------- strstr(p , p1)

返回值:第一次查到的字符在字符串中的地址;没找到则返回空。

字符串检测函数

#include <ctype.h>

1、检查是否为字母字符   ----------------- isalpha(int c)

2、检查是否为大写字母字符   ----------------- isupper(int c)

3、检查是否为小写字母字符   ----------------- islower(int c)

4、检查是否为数字   ----------------- isdigit(int c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值