K&R C Bible EX1-9 练习

本文介绍了一个简单的C语言程序,该程序能够读取输入并将所有连续的空格替换为单个空格,确保文本格式清晰整洁。通过使用状态变量跟踪前一个字符的状态,程序能够有效地处理空格。

习题1-9 编写一个将输入复制到输出的程序,将每一个连续一个或多个空格用一个空格替代。

思路:1.如何判断一个空格,这里涉及的是或者否语句  可以用==或者!=‘  ’(单引号里面为空格)

          2.这里最关键的就是如何判断是一个连续的空格。并且如果字符间只有一个空格的时候是需要按照一个空格的格式输出。这里可以按照状态进行分类,假设用一个数字或者标识保存着前面一个字符的状态即是一个空格或者不是一个空格。那么思路就简单了,如果当前的字符是空格,然后判断前一个字符状态,如果是空格表明这是一个连续的空格,那么这个空格就跳过不显示。如果前一个不是空格那就先输出当前的空格,并且将当前的空格状态赋予前一个字符的状态当做下次判断的依据。如果你听懂了刚才我所叙述的内容,你将会写出如下的程序:

#include <stdio.h>
#define SP 0    //定义空格状态 SP: Space缩写
#define NOTSP 1 //定义非空状态 NOTSP: NOT Space缩写
int
main()
{
	char c;
	char pre_state = SP; //先用pre_state定义前一个字符的状态,并且将空格状态初始化给pre_state
	while((c=getchar())!=EOF) //用是否是End Of File (Linux 下按 Ctrl+D 表示EOF) 跟用户交互,判断字符输入的结束
	{
		if(c==' ')  //首先判断是否是一个空格,如果是一个空格则进入判断语句内部,并且判断是否是连续空格
		{
			if( pre_state == NOTSP) //如果前一个字符不是空格,那么表示这是第一个空格
			{
			putchar(c);//直接输出第一个空格
			pre_state=SP; //将状态变为前一个字符是空格状态
			}
			else 
			;//如果前一个字符是空格,那么程序什么都不做,直接空语句
		}
		else 
		{
		putchar(c);//如果用户输入不是空格那么直接复制用户的输入即可		
		}
	}
	return 0;
}

如果你这样交个编译器,并且输入:     (前面有三个空格)hello     (前面有五个空格)world,将会得到:  (前面一个空格)hello(中间无空格)world    

也就是说句首的连续三个空额用一个空格输出,出现我们预期的效果,但是后面的五个连续空格没有缩并成一个空格。这样需要再非空格输出后将前一个字符状态转变成非空格状态,这样就完满了。

#include <stdio.h>
#define SP 0    //定义空格状态 SP: Space缩写
#define NOTSP 1 //定义非空状态 NOTSP: NOT Space缩写
int
main()
{
	char c;
	char pre_state = SP; //先用pre_state定义前一个字符的状态,并且将空格状态初始化给pre_state
	while((c=getchar())!=EOF) //用是否是End Of File (Linux 下按 Ctrl+D 表示EOF) 跟用户交互,判断字符输入的结束
	{
		if(c==' ')  //首先判断是否是一个空格,如果是一个空格则进入判断语句内部,并且判断是否是连续空格
		{
			if( pre_state == NOTSP) //如果前一个字符不是空格,那么表示这是第一个空格
			{
			putchar(c);//直接输出第一个空格
			pre_state=SP; //将状态变为前一个字符是空格状态
			}
			else 
			;//如果前一个字符是空格,那么程序什么都不做,直接空语句
		}
		else 
		{
		putchar(c);//如果用户输入不是空格那么直接复制用户的输入即可		
		pre_state=NOTSP; //将状态重新回到前一个字符非空状态}
	}
	return 0;
}

内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电--氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
内容概要:本文深入探讨了RS485通信协议在芯片行业自动化测试系统中的实际开发与应用,涵盖其关键概念、电气特性、通信机制及与Modbus RTU协议的结合使用。文章重点介绍了差分信号完整性设计、主从时序控制、CRC校验与重传机制等核心技术要点,并通过一个基于Python的完整代码实例,展示了如何实现RS485主站对探针台、自动分选机等芯片测试设备的控制与数据采集。此外,还分析了RS485在晶圆探针台、ATE设备集群和环境监控等典型场景的应用,并展望了其与工业以太网融合、智能化诊断、高速化及AI集成的发展趋势。; 适合人群:具备一定嵌入式系统或工业通信基础,从事芯片测试、自动化设备开发及相关领域的研发人员,尤其是工作1-3年希望提升现场总线应用能力的工程师。; 使用场景及目标:①理解RS485在高干扰芯片测试环境中稳定通信的设计原理;②掌握Modbus RTU协议在Python下的实现方法,用于实际控制探针台、Handler等设备;③构建可靠的数据采集与设备控制系统,支持CRC校验、异常处理和日志追踪;④为后续向高速通信和智能诊断系统升级提供技术储备。; 阅读建议:此资源强调实战开发,建议结合硬件环境动手调试代码,重点关注线程锁、CRC计算、帧解析和超时控制等关键环节,在真实产线中验证通信稳定性,并利用日志系统进行故障分析与优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值