【C语言】利用数组处理批量数据(字符数组)

news2024/12/25 13:01:11

前言:前面已经介绍了,字符数据是以字符的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


字符数组的输入输出

字符数组的输入输出可以有两种方法。

  1. 逐个字符输入输出。用格式符"%c"输入或输出一个字符如下图
  2. 将整个字符串一次输入或输出。用"%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;
}

运行结果:在这里插入图片描述


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。

🫵🫵🫵 祝各位接下来好运连连 💞

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用ebpf 监控linux内核中的nat转换

1.简介 Linux NAT&#xff08;Network Address Translation&#xff09;转换是一种网络技术&#xff0c;用于将一个或多个私有网络内的IP地址转换为一个公共的IP地址&#xff0c;以便与互联网通信。 在k8s业务场景中&#xff0c;业务组件之间的关系十分复杂. 由于 Kubernete…

浅谈在操控器类中,为何要通过osgGA::CameraManipulator的逆矩阵改变视点位置

在osg代码目录下的include\osgGA目录存放了很多osg自带的操控器类&#xff0c;这些操控器类都派生自osgGA::CameraManipulator&#xff0c;而这个CameraManipulator又派生自osgGA::GUIEventHandler&#xff0c;可见其本质上是个事件处理类。因此它首先会接收事件&#xff0c;比…

月薪20k的软件测试工程师都要具备什么能力?你跟大佬的差距在哪?

第一&#xff0c;强大的业务能力&#xff1a;很熟悉业务流程&#xff0c;熟悉业务模块、数据、架构&#xff0c;测试所需资源。了解测试所需时间。 第二&#xff0c;发现bug能力&#xff1a;一般问题发现的能力&#xff0c;隐性问题发现能力&#xff0c;连带问题发现能力&…

专为实现最高性能和效率而设计,SQN3242UCKGTA、SQN3220SC、SQN3220 LTE-A Cat 6 模块【SKY85735-11射频前端】

一、SQN3242UCKGTA、SQN3220SC、SQN3220 LTE-A Cat 6 模块 1、简介 Sequans 的 Cassiopeia 是 Cat4 和 Cat6 LTE-Advanced 平台系列&#xff0c;包括集成了高性能网络和应用 CPU 的 SQN3220 Cat6 基带 SoC 和 SQN3220SC Cat4 基带 SoC、Sequans 的 SQN3242 LTE 优化收发器、经…

Pyhon-每日一练(1)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

大华智慧园区前台任意文件上传(1day)

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 漏洞简介 大华智慧园区综合管理平台是一个集智能化、信息化、网络化、…

3D人脸生成的论文

一、TECA 1、论文信息 2、开源情况&#xff1a;comming soon TECA: Text-Guided Generation and Editing of Compositional 3D AvatarsGiven a text description, our method produces a compositional 3D avatar consisting of a mesh-based face and body and NeRF-based ha…

总结三:计算机网络面经

文章目录 1、简述静态路由和动态路由&#xff1f;2、说说有哪些路由协议&#xff0c;都是如何更新的&#xff1f;3、简述域名解析过程&#xff0c;本机如何干预域名解析&#xff1f;4、简述 DNS 查询服务器的基本流程是什么&#xff1f;DNS 劫持是什么&#xff1f;5、简述网关的…

CCS安装和运行TMS320F28004x第一个程序

1. CCS安装 TI 的MCU或者DSP&#xff0c;官方的集成开发环境是 Code Composer Studio™ &#xff0c;要开发TI的芯片&#xff0c;首先需要安装 CCS 环境。 CCS 软件可以到下面的 TI 官网下载&#xff1a; https://www.ti.com.cn/tool/cn/CCSTUDIO 下载完之后&#xff0c;点击…

Pandas vs SQL全面对比

前一段时间给大家详解过 Pandas 的用法&#xff0c;今天再来分享下 Pandas 与 SQL 的对比。 Pandas 和 SQL 有很多相似之处&#xff0c;都是对二维表的数据进行查询、处理&#xff0c;都是数据分析中常用的工具。 对于只会 Pandas 或只会 SQL 的朋友&#xff0c;可以通过今天…

【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】

【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】 1、前言2、实验环境3、自我总结1、基础了解仪器控制-熟悉仪器2、连接SCPI协议3、选择控制方式-程控方式-RS2324、代码编写 4、熟悉协议-SCPI协议5、测试实验-测试指令&#xff08;1&#xff09;硬件连接&#xff08;…

学习记忆——图像篇——记忆古诗词

《长歌行》 青青园中葵&#xff0c;朝露待日晞。 阳春布德泽&#xff0c;万物生光辉。 常恐秋节至&#xff0c;焜黄华叶衰。 百川东到海&#xff0c;何时复西归&#xff1f; 少壮不努力&#xff0c;老大徒伤悲&#xff01;

wisemodel 始智AI - 小记

文章目录 关于 wisemodel 始智AI 关于 wisemodel 始智AI https://www.wisemodel.cn/home 旨在打造中国版 “HuggingFace” 该社区汇聚了清华 / 智谱 chatglm2-6B、Stable Diffusion V1.5、alphafold2、seamless m4t large 等模型&#xff0c;以及 shareGPT、ultrachat、moss-…

80%测试员被骗,关于jmeter 的一个弥天大谎!

jmeter是目前大家都喜欢用的一款性能测试工具&#xff0c;因为它小巧、简单易上手&#xff0c;所以很多人都愿意用它来做接口测试或者性能测试&#xff0c;因此&#xff0c;在目前企业中&#xff0c;使用各个jmeter的版本都有&#xff0c;其中以jmeter3.x、4.x的应该居多。 但是…

网络安全行业真的内卷了吗?网络安全就业必看

前言 有一个特别流行的词语叫做“内卷”&#xff1a; 城市内卷太严重了&#xff0c;年轻人不好找工作&#xff1b;教育内卷&#xff1b;考研内卷&#xff1b;当然还有计算机行业内卷…… 这里的内卷当然不是这个词原本的意思&#xff0c;而是“过剩”“饱和”的替代词。 按照…

c++ 学习 之 运算符重载 知识要点

我们要好好分清楚一些运算符的结果为 左值还是 右值 赋值与调用

5. Mysql卸载

Mysql卸载 已经成功安装mysql&#xff0c;没有必要卸载&#xff0c;卸载之后不一定再次会安装成功。 双击安装包 检查如下三个目录是否有mysql&#xff0c;有的话&#xff0c;删除掉即可&#xff08;前提&#xff0c;电脑只有Mysql8,否则mysql其他版本也会被删除&#xff09;…

c#设计模式-行为型模式 之 状态模式

&#x1f680;简介 状态模式是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为&#xff0c;我们可以通过创建一个状态接口和一些实现了该接口的状态类来实现状态模式。然后&#xff0c;我们可以创建一个上下文类&#xff0c;它会根据其当前的状态对象来改…

跨境电商卖家必知:如何提升订单好评的技巧大揭秘

随着跨境电商行业的不断发展&#xff0c;订单好评对于卖家来说变得越发重要。好评不仅能够提升产品和店铺的声誉&#xff0c;还能增加购买者的信任度&#xff0c;提高销售额。但是&#xff0c;如何获取更多的订单好评却是一个令卖家头疼的问题。下面将为您分享几个跨境电商订单…

PyTorch 深度学习实战

文章目录 前言1. 环境安装1.Anaconda2.pytorch cuda 环境3.测试 前言 1. 环境安装 1.Anaconda 可以参考这里&#xff1a;Anaconda学习 2.pytorch cuda 环境 我是按照下面的博客一步步完成&#xff0c;亲测有效 Pytorch安装教程&#xff08;最全最详细版&#xff09; 我的…