【C语言】利用数组处理批量数据(字符数组)
前言:前面已经介绍了,字符数据是以字符的ASCII代码存储在存储单元中的,一般占一个字节。由于ASCII代码也属于整数形式,因此在C99标准中,把字符类型归纳为整型类型中的一种。
💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:C程序设计谭浩强版本 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
目录
- 怎样定义字符数组
- 字符数组的初始化
- 怎样引用字符数组中的元素
- 字符串和字符串的结束标志
- 字符数组的输入输出
- 用字符串处理函数
- puts函数 -- 输出字符串的函数
- gets函数 -- 输入字符串
- 字符数组应用举例
怎样定义字符数组
用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符。定义字符数组的方法与定义数值型数组的方法类似。例如:
char c[10];
c[0] ='I'; c[1] =' '; c[2] ='a'; c[3] ='m'; c[4] = ' ';
c[5] = 'h'; c[6] ='a'; c[7] ='p'; c[8] = 'p'; c[9] = 'y';
以上定义了c为字符数组,包含了10个元素。赋值以后数组的状态如下图所示:

由于字符型数据是以整数的形式(ASCII代码)存放的,因此也可以用整型数组来存放数据,例如:
int c[10];
c[0] = 'a';
//虽然合法,但是浪费空间
字符数组的初始化
对于字符数组的初始化,最容易理解的方式就是用"初始化列表",把各个字符赋给数组中的各个元素。例如:
char c[10] = {'I',' ','a','m',' ','h','a','p','p','y'};
把10个字符依次赋给c[0] ~c[9] 这10个元素。
如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值的个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(‘\0’),例如:
char c[10] = { 'a','b','c',' ','d','m','y','h' };
数组状态如下图所示:
(Vscode2019)下的状态

如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值的个数确定数组长度。例如:
int main()
{char c[] = { 'a','b','c',' ','d','m','y','h' };printf("数组的长度是%d\n", sizeof(c)/sizeof(c[0]));//计算数组的长度return 0;
}
运行结果:

怎样引用字符数组中的元素
可以引用字符数组中的一个元素,得到一个字符。
例题:输出一个已知字符
int main()
{char c[15] = { 'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t'};int i = 0;for (i = 0; i < 15; i++){printf("%c", c[i]);}printf("\n");return 0;
}
运行结果:

例题2:输出一个菱形
int main()
{int line = 0;scanf("%d", &line);//打印上半部分;int i = 0;for (i = 0; i < line; i++){//打印一行//打印空格//打印*int j = 0;for (j = 0; j < line - 1 - i ; j++){printf(" ");}//打印*for (j = 0; j < 2 * i + 1 ; j++){printf("*");}printf("\n");}//下for (i = 0; i < line - 1; i++){//打印一行//打印空格//打印*int j = 0;for (j = 0; j <= i; j++){printf(" ");}//打印*for (j = 0; j < 2 *(line - i - 1)- 1; j++){printf("*");}printf("\n");}return 0;
}
运行结果:

字符串和字符串的结束标志
在C语言中,是将字符串作为字符数组来处理的。在实际工作中,人们关心的往往是字符串的有序长度。例如,定义一个字符数组的长度为100,而实际有效字符只有40个。为了测定字符串的实际长度,C语言规定了一个"字符串结束标志",以字符’\0’作为结束标志。如果字符数组中有若干字符前面9个字符都不是空字符(‘\0’),而第十个字符是‘\0’,则认为该数组中有一个字符串,其有效字符为9个。也就是说,遇到字符‘\0’ 时,表示字符串结束,把前面的字符组成一个字符串。
对于C语言处理字符串的方法有以上的了解后,再对字符数组初始化的方法补充了一种方法,即用字符串常量来使字符数组初始化。例如:
char c[] ="I am a student";
这里不像前面用单个字符作为字符数组的初始值,而是用一个字符串(注意字符串的两端是双撇号而不是单撇号扩起来的)作为初值。显然这种方式更加直观、方便、符号人们的习惯。请注意,此时c的长度不是14,而是15。因为字符串常量的最好由系统加上一个’\0’。
int main()
{char c[] = "I am a student";printf("sz = %d\n", sizeof(c) / sizeof(c[0]));//计算长度(包括\0)printf("len = %d\n", strlen(c));//计算长度(不包括\0)return 0;
}
运行结果:
(这里关于sizeof和strlen的区别就不具体说明,有感兴趣的可以看我之前文章,详细讲解了strlen与sizeof)关于strlen与sizeof
字符数组的输入输出
字符数组的输入输出可以有两种方法。
- 逐个字符输入输出。用格式符"%c"输入或输出一个字符如下图
- 将整个字符串一次输入或输出。用"%s"格式符,意思是对字符串(string)的输入输出。例如:
char c[] = "china";printf("%s\n", c);
在内存中数组c的存储情况为:

输出时,遇到’\0’就停止输出。输出结果为:

用字符串处理函数
在C函数库中提供了一些专门处理字符串的函数,方便使用。几乎所有版本的C语言编译系统都提供这些函数。下面介绍几种常用的函数。
puts函数 – 输出字符串的函数
其一般形式为
puts(字符数组)
其作用是将一个字符串(以’\0’作为结束的字符序列)输出到终端,且puts函数输出使将字符串的结束标志’\0’转换成了’\n’,即输出完字符串后换行
例如:
int main()
{char c[] = "china";puts(c);return 0;
}
运行结果:

gets函数 – 输入字符串
其一般形式为:
gets(字符数组)
其作用是从终端输入一个字符串到字符数组,并得到一个函数值。该函数值是字符数组的起始地址。
例如:
int main()
{char c[10] = { 0 };gets(c);puts(c);return 0;
}
运行结果:
- strcat函数 – 字符串连接函数
- strcpy函数与strncpy函数 – 字符串复制函数
- strcmp函数 – 字符串比较函数
关于这些函数的讲解在这里我也不过多介绍了,各位可以点这个连接跳转到我前面的博客,里面详细讲解了这几个函数并且如何模拟实现这些函数。
字符串函数的讲解与模拟实现
字符数组应用举例
例题:输入一行字符,统计其中有多少单词,单词之间用空格隔开。
方法1:
int main()
{char arr[20] = { 0 };gets(arr);char* str = arr;int count = 0;int i = 0;while (*str)//判断'\0'{if (*str != ' ')//找出非空格的数{count++;}str++;}printf("%d\n", count);return 0;
}
方法2:
int main()
{char arr[20] = { 0 };int i = 0;int count = 0;gets(arr);for (i = 0; i < 20; i++)//变量数组{if (arr[i] != '\0' && arr[i] != ' '){count++;}}printf("%d\n", count);return 0;
}
运行结果:
结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。
相关文章:
【C语言】利用数组处理批量数据(字符数组)
前言:前面已经介绍了,字符数据是以字符的ASCII代码存储在存储单元中的,一般占一个字节。由于ASCII代码也属于整数形式,因此在C99标准中,把字符类型归纳为整型类型中的一种。 💖 博主CSDN主页:卫卫卫的个人主页 &#x…...
算法通过村第十二关-字符串|白银笔记|经典面试题
文章目录 前言1. 反转问题1.1 反转字符串1.2 k个一组反转1.3 仅仅反转字母1.3.1 采用栈实现操作1.3.2 采用双指针实现操作 1.4 反转字符串里面的单词1.4.1 使用语言提供的方法来解决(内置API)1.4.2 如何优雅自己实现上述功能 2. 验证回文串3. 字符串中的第一个唯一字符4. 判断是…...
《视觉 SLAM 十四讲》V2 第 5 讲 相机与图像
文章目录 相机 内参 && 外参5.1.2 畸变模型单目相机的成像过程5.1.3 双目相机模型5.1.4 RGB-D 相机模型 实践5.3.1 OpenCV 基础操作 【Code】OpenCV版本查看 5.3.2 图像去畸变 【Code】5.4.1 双目视觉 视差图 点云 【Code】5.4.2 RGB-D 点云 拼合成 地图【Code】 习题题…...
使用libmodbus库开发modbusTcp从站(支持多个主站连接)
使用libmodbus库开发modbusTcp从站(支持多个主站连接) Chapter1 使用libmodbus库开发modbusTcp从站(支持多个主站连接)rdsmodbusslave.hrdsmodbusslave.cppmain.cpp Chapter1 使用libmodbus库开发modbusTcp从站(支持多个主站连接) 参考链接:…...
GPT系列论文解读:GPT-2
GPT系列 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型: GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer…...
(四)激光线扫描-光平面标定
在上一章节,已经实现了对激光线条的中心线提取,并且在最开始已经实现了对相机的标定,那么相机标定的作用是什么呢? 就是将图像二维点和空间三维点之间进行互相转换。 1. 什么是光平面 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交…...
妙不可言的Python之旅----(二)
Python基础语法 什么是字面量 字面量:在代码中,被写下来的的固定的值,称之为字面量 常用的值类型 类型 描述 说明 数字(Number) 支持 • 整数(int) • 浮点数(floatÿ…...
cartographer(1)-运行
1.下载数据集 #1.下载数据集: mkdir /home/tang/bagfiles#2.开始二维建图 cd /home/tang/carto_ws/cartographer_detailed_comments_ws/install_isolated/source install_isolated/setup.bash rospack profile #新装的包索引地址存在ros的环境里 roslaunch ca…...
C++:模板进阶与继承
模板进阶与继承 模板进阶1.非类型的模板参数2.模板的特化2.1特化的概念2.2函数模板特化2.3类模板特化2.4全特化和偏特化2.4.1全特化2.4.2偏特化 3.模板的分离编译3.1同文件分离3.2不同文件下分离 继承1.继承的概念和定义1.1继承的概念1.2继承的定义1.2.1定义格式1.2.2继承关系和…...
vue-img-cutter 实现图片裁剪[vue 组件库]
借助 vue-img-cutter 可以在网页端实现图片裁剪功能,最终功能效果如下: 组件 npm 安装 npm install vue-img-cutter2 --save-dev # for vue2 npm install vue-img-cutter3 --save-dev # for vue3vue-img-cutter使用 template模板标签模块,…...
手把手教你从零开始腾讯云服务器部署(连接建站教程)
使用腾讯云服务器搭建网站全流程,包括轻量应用服务器和云服务器CVM建站教程,轻量可以使用应用镜像一键建站,云服务器CVM可以通过安装宝塔面板的方式来搭建网站,腾讯云服务器网txyfwq.com分享使用腾讯云服务器建站教程,…...
微信开放平台第三方开发,实现代小程序备案申请
大家好,我是小悟 微信小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一个…...
设计模式——11. 享元模式
1. 说明 享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少系统中相似对象的内存占用或计算开销,通过共享相同的对象来达到节省资源的目的。 享元模式的核心思想是将对象的状态分为内部状态(Intrinsic State)和外部状态(Extrinsic State): 内部状态是对象…...
【LLM】主流大模型体验(文心一言 科大讯飞 字节豆包 百川 阿里通义千问 商汤商量)
note 智谱AI体验百度文心一言体验科大讯飞大模型体验字节豆包百川智能大模型阿里通义千问商汤商量简要分析:仅从测试“老婆饼为啥没有老婆”这个问题的结果来看,chatglm分点作答有条理(但第三点略有逻辑问题);字节豆包…...
CSS小计
1:设置图片随窗缩放 使用百分比 width: 100%;height: 100%; 使用vmin: 将可视区域分为100vmin width: 100vmin;height: 100vmin; 2:设置字体颜色与背景色融合 mix-blend-mode: difference 3: 设置宽度自适应 width:fit-content 4:外边距合并 当两个相领的两个容…...
机器学习:决策树
决策树 决策树是一种基于树形结构的模型,决策树从根节点开始,一步步走到叶子节点(决策),所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。 特征选择 根节点的选择该用哪一个特征呢ÿ…...
xxl-job的原理(2)—调度中心管理注册信息
一、调度中心管理注册信息 1.JobApiController 执行器调用调度中心的url来实现注册、下线、回调等操作;其主要的实现类是JobApiController,调用/api/registry接口注册执行器信息,调用/api/registryRemove接口下线执行器信息,调用…...
小白入门pytorch(二)----神经网络
本文为🔗[小白入门Pytorch]学习记录博客 文章目录 前言一、神经网络的组成部分1.神经元2.神经网络层3.损失函数4.优化器 二、Pytorch构建神经网络中的网络层全连接层2.卷积层3.池化层4.循环神经网络5.转置卷积层6.归一化层7.激活函数层 三、数据加载与预处理1.数据加…...
【进阶C语言】排序函数(qsort)与模拟实现(回调函数的实例)
本章大致内容目录: 1.认识回调函数 2.排序函数qsort 3.模拟实现qsort 回调函数为C语言重要知识点,以函数指针为主要知识;下面介绍回调函数的定义、回调函数的库函数举例即库函数模拟实现。 一、回调函数 1.回调函数定义 回调函数就是一…...
CentOS 7 上编译和安装 SQLite 3.9.0
文章目录 可能报错分析详细安装过程 可能报错分析 报错如下: django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17). 原因:版本为3.7.太低了,需要升级到3.9.0至少 详细安装过程 1.安装所需的…...
1771-OZL处理器模块
1771-OZL 处理器模块 — 产品特点1771-OZL 是1771系列的PLC处理器模块,用于工业自动化系统的逻辑运算与过程控制。适用于PLC-5标准机架控制系统支持数字量输入/输出及模拟量接口内置高速逻辑运算功能可执行顺序控制和定时/计数功能支持程序存储与在线修改高可靠性设…...
TradingView图表库集成宝典:15+主流框架实战指南
TradingView图表库集成宝典:15主流框架实战指南 【免费下载链接】charting-library-examples Examples of Charting Library integrations with other libraries, frameworks and data transports 项目地址: https://gitcode.com/gh_mirrors/ch/charting-library-…...
避坑指南:在RV1103B上为SC132GS摄像头添加设备树节点的正确姿势
RV1103B平台SC132GS摄像头设备树配置实战指南 1. 瑞芯微RV1103B平台摄像头开发概述 在嵌入式视觉系统开发中,瑞芯微RV1103B凭借其出色的图像处理能力和低功耗特性,成为工业视觉、智能门铃等场景的热门选择。SC132GS作为一款高性价比的1/3英寸CMOS传感器&…...
Hypervisor环境下高效进程间通信技术解析
1. Hypervisor环境下的进程通信挑战 在虚拟化技术大行其道的今天,Hypervisor环境下的进程间通信(IPC)已经成为系统性能的关键瓶颈。想象一下,你住在小区同一栋楼的两个单元里,明明直线距离只有10米,却要绕到…...
4个强力技巧:Squirrel-RIFE开源工具视频增强全指南
4个强力技巧:Squirrel-RIFE开源工具视频增强全指南 【免费下载链接】Squirrel-RIFE 项目地址: https://gitcode.com/gh_mirrors/sq/Squirrel-RIFE Squirrel-RIFE(简称SVFI)是一款基于AI技术的开源视频补帧工具,通过在原始…...
轻松破解游戏资源加密难题:RPG Maker Decrypter使用指南
轻松破解游戏资源加密难题:RPG Maker Decrypter使用指南 【免费下载链接】RPGMakerDecrypter Tool for extracting RPG Maker XP, VX and VX Ace encrypted archives. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter 直面游戏资源解密痛点 …...
别再死记硬背了!用‘快递寄送’和‘跨国通话’的比喻,5分钟搞懂OSI七层模型与TCP/IP五层模型
快递与越洋电话:用生活场景拆解网络分层模型 想象一下,你网购的商品从深圳工厂到北京家门口,要经过打包、装车、跨省运输、本地配送多个环节——这和网络数据传输的层层封装如出一辙。而当你给海外亲友视频通话时,双方手机自动协商…...
如何在Java中使用Thread创建线程
在Java中使用Thread类创建线程是一种常见而直接的方式。你可以继承Thread类并重写其run()定义线程执行的任务的方法。当调用线程对象时start()JVM将为该线程分配资源并自动执行该方法run()方法中的代码。继承Thread类,重写run方法创建线程的第一步是定义一个类继承T…...
从原理到调参:图解RoIAlign双线性插值在torchvision.ops中的实现细节
从原理到调参:图解RoIAlign双线性插值在torchvision.ops中的实现细节 当你在PyTorch中实现目标检测模型时,RoIAlign(Region of Interest Align)是一个绕不开的核心操作。与传统的RoIPooling相比,RoIAlign通过双线性插值…...
如何快速学习Web安全:DVWA-Chinese完整教程指南
如何快速学习Web安全:DVWA-Chinese完整教程指南 【免费下载链接】DVWA-Chinese DVWA全汉化版本 项目地址: https://gitcode.com/gh_mirrors/dv/DVWA-Chinese 想要在安全领域快速成长?DVWA-Chinese就是你的最佳Web安全测试平台!作为全球…...

