当前位置: 首页 > article >正文

数组和字符串

1.数组

数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。

每个数组都有一个名字,我们称之为数组名。

数组名代表数组的起始地址。 数组元素由索引或下标标识,索引或下标从0开始

数组的特性必须在使用前定义:

        存储类型 数据类型 数组名 数组大小

数组定义的语法

        存储类型   数据类型   数组名[数组长度] ;

        例如:int player[11];

数组名后接一个或多个括在方括号内的表达式,用以指定数组的维数 数组长度只能是常量和常量表达式(大于0)

规范

所有数组元素具有相同的类型

允许使用变量的地方都可以使用数组元素

可以使用整型表达式引用数组的元素: 数组名[整型表达式]

(1)一维数组

一维数组在内存中的存放,地址是连续的!

        格式 :type 函数名[长度];

自动数组中的元素需要分别初始化

externstatic修饰的数组元素自动初始化为 0

数组初始化是在数组定义时给元素赋初值

初始化赋值的一般形式

        类型 数组名[常量表达式]={值,值…};

        例如:int ary[10]={0,1,2,3,4,5,6,7,8,9};

初始化的几点规定

        元素之间用逗号隔开 可以只给部分元素赋值,剩余元素赋0值

        给全部元素赋值时,可以不说明元素的个数

注:   ·C编译器不会检查下标的越界 ,即使两个数组的类型和大小相同,也不能检验其是否相等

        ·不能直接将一个数组赋给另一个数组

        ·不能为数组整体赋值

(2)二维数组

可以看成是由两个一维数组组成的数组 ,类似于一个由行和列组成的表格。

存储形式

        二维数组在内存中是按行的顺序存放的,即先存放第一行的元素,再存放第二行的元素。

二维数组的声明方式

        类型说明符  数组名[常量表达式1][常量表达式1];

        例如:int temp[4][3];

初始化及四种形式

        数据类型 数组名[常量表达式1][常量表达式2]={初始化数据}

        (1) 分行给二维数组赋初值。

                如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

        (2) 可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。

                如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

        (3) 可以对部分元素赋初值。

                如    int a[3][4]={{1},{5},{9}};  

                其他部分会自动赋值为0;

        (4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不              能省。

        如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

                它等价于:int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};

 二维数组元素的引用

        数组名[行下标][列下标]

        例如:a[1][3] = 12;

(3)字符数组

与字符串的关系

C语言没有专门的字符串变量,字符串的存储必须通过字符数组来实现。

        一维字符数组用于存储1个字符串(每个元素存放1个字符)。

        二维字符数组用于同时存储多个字符串(每一行存储1个字符串)。

空字符‘\0’自动添加到字符串的内部表示中止,它占内存但不记入字符串长度

字符数组的定义、初始化和元素的引用与一般的数组相同。

可以将字符串常量赋给字符串变量

声明字符串变量

        格式    char str[10];

  在声明字符串变量时,应该为这个空结束符预留一个额外元素的空间

  str是一个字符数组变量,它最多可以容纳包括空结束符在内的10个字符

注:当初始化的字符(至少要有一个)少于字符数组的长度时,未初始化部分将被编译系统自动用空字符‘\0’赋值。

字符串变量的使用

字符串也是一维数组,同样享有一维数组的所有特征

例如:

        char str1[20] = “abc”,str2[20]; str2 = str1;    /*错误*/

        str2 = “abc”;    /*错误*/

        str1 == str2;    /*没意义*/

同样可以通过数组名与下标访问其数组元素。

例如:

        char str[6] = “hello”; str[0] = ‘H’;  

 /*把字符h改成字符H*/ 字符串可以通过系统函数进行整体操作

2.字符串函数

(1)输入-gets()

功能说明:

是接受通过标准输入所获得的字符串的最简单的方法。

它接受按下回车键以前输入的所有字符(包括空格),并用“\0”字符替换末尾的换行符“\n”。

函数原型:

        char *gets(char *buffer);

        buffer存放输入数据的首地址

返回值:成功时返回输出缓冲区首地址,否则返回NULL

例如:     

        char name[50]=“”;   

         printf(“enter your name:”);     

        gets(name);

(2)输出-puts()

功能说明:

用于在标准输出设备上显示字符串,并把末尾的字符串结束符 “\0”替换成换行符“\n”字符输出(自动换行的原因)

函数原型:

        int puts(const char *string);   

        string输出数据的首地址

返回值:成功时返回最后一个字符的ASCII码('\n'),否则返回EOF

例如:   

        puts(“my name is”);    /*会输出换行符*/     

        puts(name);

(3)格式化-sprintf()

功能说明:

将其他数据类型转换成字符串类型并输出到指定字符串中.

函数原型:

        int sprintf( char *buffer, const char *format [, argument] ... );

        *buffer指定字符串的首地址

函数参数:    

        buffer是字符数组名        

        format是格式化字符串

返回值: buffer中字符的个数 ,否则返回EOF

补:

1、格式化数字字符串 (itoa)       

        sprintf(s, "%d", 123);  

2、控制浮点数打印格式     

        sprintf(s, "%.3f", 3.1415626);

3、连接字符串 (strcat)     

        sprintf(s, "%s love %s.", “i”, “CSDN ”);

4、打印地址信息     

        sprintf(s, "%p", &i);  

5、利用sprintf的返回值 (strlen)      

        int len = sprintf(s, "%d", i);

(4)长度计算-strlen()

功能说明:确定字符串的长度,不包括'\0'的长度

函数原型:

        int strlen(const char *string);

        *string求长度的字符串首地址     

返回值:字符串实际长度,即字符串中'\0'之前的字符个数

(5)复制-strcpy()

功能说明:将一个字符串中的值复制到另一个字符串中

函数原型

        char* strcpy(char *dest,const char *source);

        *dest目标字符串首地址    *soure要复制的字符串首地址     

返回值:成功时返回dest,否则返回NULL

说明:dest必须足够大以便能够容纳被复制的字符串。建议使用strncpy()函数

(6)连接-strcat()

功能说明:将两个字符串连接成一个字符串(将source 接到dest的末尾)

函数原型:

        char *strcat(char *dest,const char *source);

        *dest目标字符串首地址    *soure要连接的字符串首地址     

成功时返回连接成功后的首地址即dest,否则返回NULL

说明: dest必须足够大。

            连接时只在新串最后保留一个‘\0’

(7)比较-strcmp()

功能说明:比较两个字符串并根据比较的结果返回一个整数值

函数原型:       

         int strcmp(const char *str1,const char *str2);

函数返回值的情况如下:

        如果 str1<str2,则返回值小于零

        如果 str1 与 str2 相同,则返回值等于零

        如果 str1>str2,则返回值大于零

比较原则:从左至右逐个对应字符按其 ASCII码值大小相比较,直到出现不同的字符或遇到‘\0’为止。

(8)字符是否存在-strchr()

功能说明:判断某个字符是否在字符串中出现

函数原型:

        char* strchr(const char *str,char ch);

        *str字符串首地址    ch要查找的字符  

该函数返回值的情况如下:

        如果该字符在字符串中出现,将返回对应这个字符(由 chr 所指向的)在字符串 str 中第一次          出现的指针。

        如果未出现,则返回 NULL。

(9)字符串是否存在-strstr()

功能说明:判断某个字符子串是否在一个字符串中出现

函数原型:

        char* strstr(const char *parent,const char *sub);

        *parent字符串首地址    *sub要查找的字符串   

该函数返回值的情况如下:

        如果该字符串sub在parent字符串中出现,将返回对应这个字符串(由 sub 所指向的)在字符          串 parent 中第一次出现的指针

        如果未出现,则返回 NULL

(10)大小写转换-strupr()/strlwr()

strlwr函数

        其一般形式为:strlwr (字符串)

        strlwr函数的作用是将字符串中大写字母换成小写字母。

strupr函数

        其一般形式为:strupr (字符串)

        strupr函数的作用是将字符串中小写字母换成大写字母。

(11)其他

sscanf()

格式化数字字符串 (atoi)      

        char name[12];

        int x=0;sscanf(“123 admin”, "%d %s", &x,name);

3.小结


http://www.kler.cn/news/358858.html

相关文章:

  • MySQL的索引类型有哪些?
  • 基于Springboot+Vue的高校实验室智能管理系统(含源码数据库)
  • 上海媒体公关-邀请媒体现场报道专访宣传
  • 机器学习和深度学习之间区别和联系
  • STM32 ADC介绍
  • 代理模式、BigDecimal详解
  • OpenCL 在命令行中clinfo 信息
  • 弛张振荡器电路
  • 微信小程序-页面通信
  • 架构设计笔记-19-大数据架构设计理论与实践
  • 豆包大模型接口调用
  • 【合集】GPT国内外免费在线AI大模型,持续更新!
  • 【厦大主办,EI检索】2024年计算机视觉与图像处理国际学术会议 (CVIP 2024,11月15-17日)
  • Ubuntu的Qt编译环境配置
  • python中的global和nonlocal关键字以及闭包和模块
  • [每日一练]游戏玩法分析(为什么使用子查询而不是having字段,为什么必须使用联合查询)
  • Flutter Scaffold组件
  • STM32CubeMX【串口收发USART】
  • Spring Boot:中小型医院网站开发新选择
  • 【4.8】图搜索算法-BFS解单词接龙