C数组与字符串

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.小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899913.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

OpenIPC开源FPV之Ardupilot配置

OpenIPC开源FPV之Ardupilot配置 1. 源由2. 问题3. 分析3.1 MAVLINK_MSG_ID_RAW_IMU3.2 MAVLINK_MSG_ID_SYS_STATUS3.3 MAVLINK_MSG_ID_BATTERY_STATUS3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW3.5 MAVLINK_MSG_ID_GPS_RAW_INT3.6 MAVLINK_MSG_ID_VFR_HUD3.7 MAVLINK_MSG_ID_GLOBAL_P…

ActiveMQ消息模式Queue和Topic机制讲解

Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例_docker activemq-CSDN博客 背景 周末由于服务器异常宕机&#xff0c;导致业务系统重启后出现ActiveMQ中的数据没有被正常消费&#xff0c;运维认为是消息积压&#xff0c;便联系博主排查。 最终发现并不存在消息积压…

GIS常见前端开发框架

#1024程序员节&#xff5c;征文# 伴随GIS的发展&#xff0c;陆续出现了众多开源地图框架&#xff0c;这些地图框架与众多行业应用融合&#xff0c;极大地拓展了GIS的生命力&#xff0c;这里介绍几个常见的GIS前端开发框架&#xff0c;排名不分先后。 1.Leaflet https://leafl…

Spring--1

spring是一个轻量级的&#xff0c;采用IOC与AOP编程思想的java后端开发框架&#xff0c;简化了企业级的应用开发。 Spring体系 数据访问层&#xff0c;Web层&#xff0c;配置中心&#xff0c;测试区 IOC 控制反转&#xff0c;将创建对象的控制权交由Spring框架&#xff0c;需…

Tongweb7049m4+THS6010-6012版本 传真实ip到后端(by yjm+lwq)

遇到客户需要通过ths传真实ip到后端也就是部署到tongweb的需求&#xff0c;在ths的httpserver.conf里的location块配置了以下内容&#xff1a; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwar…

Redis技术解析(基于Redis的项目实战)

本项目源码请从作者仓库中拉取 Redis复盘: 本项目将通过实战讲解Redis的应用&#xff0c;包括使用Redis共享session实现短信登录、处理商户查询缓存问题、进行优惠券秒杀活动、基于GEOHash定位附近商户、实现UV统计、管理用户签到、构建好友关注系统&#xff0c;以及使用List和…

数字后端实现静态时序分析STA Timing Signoff之min period violation

今天给大家分享一个在高性能数字IC后端实现timing signoff阶段经常遇到的min period violation。大部分时候出现memory min period问题基本上都是需要返工重新生成memory的。这是非常致命的错误&#xff0c;希望大家在做静态时序分析时一定要查看min period violation。 什么是…

Oracle 常见索引扫描方式概述,哪种索引扫描最快!

一.常见的索引扫描方式 INDEX RANGE SCANINDEX FAST FULL SCANINDEX FULL SCAN(MIN/MAX)INDEX FULL SCAN 二.分别模拟使用这些索引的场景 1.INDEX RANGE SCAN create table t1 as select rownum as id, rownum/2 as id2 from dual connect by level<500000; create inde…

Unity RPG梦幻场景素材(附下载链接)

Unity RPG梦幻场景素材 点击下载资源 效果图&#xff1a; 资源链接

CORS预检请求配置流程图 srpingboot和uniapp

首先要会判断预检请求 还是简单请求 简单请求 预检请求 #mermaid-svg-1R9nYRa7P9Pll4AK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1R9nYRa7P9Pll4AK .error-icon{fill:#552222;}#mermaid-svg-1R9nYRa7P9Pll4…

geoserver解析元数据获取图层相关参数

需求&#xff1a; 1、通过geoserver地址获取所有图层名称&#xff1b; 2、加载wms服务&#xff0c;实现自动定位。 获取图层名和范围视图有两种思路&#xff1a; 1、调取geoserver的rest接口。缺点就是需要验证登录。 rest接口官方文档&#xff1a;GeoServer API Docs 2、…

C++(标准输入输出流、命名空间、string字符串、引用)

C特点及优势 &#xff08;1&#xff09;实现了面向对象&#xff0c;在高级语言中&#xff0c;处理运行速度是最快&#xff1b; &#xff08;2&#xff09;非常灵活&#xff0c;功能非常强大&#xff0c;相对于C的指针优势&#xff0c;C的优势为性能和类层次结构&#x…

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包&#xff0c;按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题&#xff0c;照着教程来就行 模型上传&#xff08;可选&#xff09; push的时候需要先认证token 最后的…

人工智能+医学

医学影响的内型&#xff1a;(X光片、计算机断层扫描、磁共振成像、超声波&#xff09; ITK snap医学图像读取 医学影像领域常见任务: 图像分类、语义分割、疾病预测、目标检测、图像配准、图像生成(应用少)、图像增强、生成放射学报告。 需要有很强的可解释…

Xshell上Linux的基础指令

目录 1、Xshell的使用 2、Linux的常用命令 2.1 位置跳转命令 1、ls 2、cd 3、pwd 2.2 文件操作 1、touch 2、cat 3、echo 4、vim 2.3 目录操作 1、mkdir 2、rm 2.4 移动操作 1、mv 2、cp 2.5 命令手册 2.6 查找操作 2.7 进程展示 2.8 网络信息 3、搭建w…

JS | 详解图片懒加载的6种实现方案

目录 一、什么是懒加载&#xff1f; 二、为什么要懒加载&#xff1f; 三、图片懒加载的实现原理 四、图片懒加载实现方式 3.1 方案一&#xff1a;设置 img 标签属性 loading“lazy” 3.2 方案二&#xff1a;利用JS监听scroll滚动事件 3.3 方案三&#xff1a;利用元素的…

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成&#xff08;Bert-Vits2&#xff09;&#xff0c;将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者&#xff1a;Xz 乔希 https://space.bilibili.com/5859321 声音归属&#xff1a;Riot Games《英雄联盟》暗裔剑魔亚托克斯 …

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…

机器学习在智能水泥基复合材料中的应用与实践

在人工智能与复合材料技术融合的背景下&#xff0c;复合材料的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计&#xff0c;从数据驱动的材料结构优化到多尺度分析&#xff0c;人工智能技术正以其强大的数据处理能力…