【PTA】6-1 删除C程序中的注释 (31 分)

6-10 **删除C程序中的注释 (15 分) PTA ** 6-10 **删除C程序中的注释 (15 分) ** 请你编写一个函数,将C语言源程序中的注释全部删去。 函数原型 // 删除注释 void Pack(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:src 指示原始程序文件,dst 指示整理后得到的文件。 C语言规定:注释以 /* 开始,以 / 结束。注释可以跨行,不允许嵌套。字符串中的 / 和 */ 不是注释。 此外C语言还规定:注释相当于一个空白字符。因此,注释被删除后应补入一个空格。 裁判程 阅读详情
AI摘要

该博客介绍了一个C语言源代码处理函数,用于删除所有的注释并保留源码结构。函数Pack通过状态机实现,能处理单行和多行注释,同时考虑了字符串和字符常量中的特殊情况。程序提供了一种方法来整理C程序,删除注释并用空格替换,以保持代码的可读性。

请你编写一个函数,将C语言源程序中的注释全部删去。

函数原型
// 删除注释
void Pack(FILE *src, FILE *dst);

说明:参数 src 和 dst 均为文件指针,其中:src 指示原始程序文件,dst 指示整理后得到的文件。

C语言规定:注释以 /* 开始,以 / 结束。注释可以跨行,不允许嵌套。字符串中的 / 和 */ 不是注释。

此外C语言还规定:注释相当于一个空白字符。因此,注释被删除后应补入一个空格。

裁判程序
#include <stdio.h>
#include <ctype.h>
#include <string.h>

// 删除注释
void Pack(FILE *src, FILE *dst);

int main()
{
    char sname[1024], dname[1024];
    FILE *sfile, *dfile;

    gets(sname);
    gets(dname);

    sfile = fopen(sname, "rb");
    if (!sfile)
    {
        printf("%s 无法打开!\n", sfile);
    }
    dfile = fopen(dname, "wb");
    if (!dfile)
    {
        printf("%s 无法打开!\n", dfile);
    }

    if (sfile && dfile)
    {
        printf("正在整理...");
        Pack(sfile, dfile);
        puts("整理完成!");
    }

    if (sfile)
    {
        fclose(sfile);
    }
    if (dfile)
    {
        fclose(dfile);
    }
    return 0;
}

/* 你提交的代码将被嵌在这里 */
思路

在没到文本末尾持续读取

每次开头判断是否读取到EOF,读到则退出

默认初始状态是普通状态

如果是普通状态

  • 判断第一个是/,读取下一个,如果是*,改变状态为多行注释,如果是/,改变状态为单行注释,如果是其他,输出这两个字符。
  • 判断第一个是单引号,输出单引号,改变状态为字符
  • 判断第一个是是双引号,输出双引号,改变状态为字符串
  • 判断第一个是其他照常输出

如果是单行注释状态

  • 其他字符不输出
  • 如果读到换行符,先输出一个空格,再输出换行,然后将状态换为普通状态

如果是多行注释状态

  • 其他字符不输出
  • 如果读到*号,读取下一个字符,如果是/,输出一个空格,将状态换为普通状态。

如果是字符状态

  • 所有字符照常输出
  • 如果读到 ’ 号,将状态换为普通状态

如果是字符串状态

  • 所有字符照常输出
  • 如果读入的是双引号,输出后把状态换为普通状态
  • 如果读取到\,则为转义字符,再读取下一个字符一起输出
代码
void Pack(FILE *src, FILE *dst)
{
	#define IN_COMMON 1
	#define IN_SINGLE 2
	#define IN_MULTILINE 3
	#define IN_CHARACTER 4
	#define IN_STRING 5
	int state = IN_COMMON;
	int ch1;
	int ch2;
	while(!feof(src))
	{
		ch1 = fgetc(src);
		if(ch1 == EOF)
			break;
		if(state == IN_COMMON)//在普通状态 
		{
			if(ch1 == '/')
			{
				ch2 = fgetc(src);
				if(ch2 == '/')//是单行注释 
					state = IN_SINGLE;
				else if(ch2 == '*')//是多行注释 
					state = IN_MULTILINE;
				else
				{
					fputc(ch1,dst);
					fputc(ch2,dst);
				}
			}
			else if(ch1 == '\'')
			{
				fputc(ch1,dst);
				state = IN_CHARACTER;
			}
			else if(ch1 == '\"')
			{
				fputc(ch1,dst);
				state = IN_STRING;
			}
			else
				fputc(ch1,dst);
		}
		else if(state == IN_SINGLE)//单行注释状态 
		{
			if(ch1 == '\n')
			{
				fputc(' ',dst);
				fputc(ch1,dst);
				state = IN_COMMON;
			}
		}
		else if(state == IN_MULTILINE)//多行注释状态 
		{
			if(ch1 == '*')
			{
				ch2 = fgetc(src);
				if(ch2 == '/')
				{
					fputc(' ',dst);
					state = IN_COMMON;
				}
			}
		}
		else if(state == IN_CHARACTER)//字符状态 
		{
			if(ch1 == '\'')
			{
				fputc(ch1,dst);
				state = IN_COMMON;
			}
			else
				fputc(ch1,dst);
		}
		else if(state == IN_STRING)//字符串状态 
		{
			if(ch1 == '\"')
			{
				fputc(ch1,dst);
				state = IN_COMMON;
			}
			else if(ch1 == '\\')
			{
				ch2 = fgetc(src);
				fputc(ch1,dst);
				fputc(ch2,dst);
			}
			else
				fputc(ch1,dst);
		}
	}	
}
嵌入式C语言笔试高频代码题解析:20段经典示例 C语言是嵌入式系统开发的基石,无论MCU固件、驱动程序还是RTOS内核,都离不开对内存布局、指针操作和寄存器编程的深入理解。在嵌入式岗位笔试中,面试官更关注底层思维与工程实践能力,常通过宏定义、位操作、结构体对齐、链表反转、状态机和环形缓冲区等典型代码题,考察候选人的语法准确度、内存意识与代码健壮性。这些知识点不仅贯穿嵌入式C语言开发的全过程,也直接映射到串口报文解析、按键消抖、数据缓存等真实项目场景。本文精选20段嵌入式C语言笔试高频代码题,从基础语法陷阱到综合项目案例,逐段给出运行思路、易错点和面试扩展 阅读详情

相关推荐

Mythos:首个具备系统级漏洞挖掘能力的AI安全模型

漏洞挖掘正从人工驱动、规则匹配的传统模式,迈向基于形式化验证与状态空间探索的AI原生范式。Mythos代表了这一转折点——它不再依赖关键词扫描或启发式规则,而是通过符号执行(SMT求解)、动态参数调度和嵌入式行为契约沙箱,实现对内存布局、控制流路径与提权链路的深度建模。其技术价值在于将‘发现→验证→利用→提升’全链路压缩至小时级,支撑可规模化、可复现、可调度的安全运营闭环。典型应用场景包括企业级渗透测试自动化、开源组件深度审计、零日漏洞预判及防御策略生成。本文聚焦Mythos在真实工业网关审计中的8小时完整

weixin_34210740的博客 472

PTA-C语言 习题12-6删除文件中的注释(20分)

删除文件中的注释 将c语言源程序(hello.c)文件中的所有注释去掉后存入另一个文件(new_hello.c)。试编写相应程序。 难度: 有脚就行(滑稽) 解法 考虑到我们平常用注释有两种用法,一种是给程序代码做解释说明,另一种则是在调试过程中用注释符限制某些语句的执行。两种放在一起,理解程序会显得很复杂。为了使程序更容易理解,我分别用两个程序来解释,从浅到深。 用注释符限制语句执行 ```c #include <stdio.h> #include<stdlib.h> typed

Mr_middle的博客 1625

基于ST32 DAC7311数模转换器驱动代码及电路设计完整版

基于ST32的DAC7311模数转换器的电路设计及驱动代码完整版

qq_39626643的博客 3718

请你编写一个函数,将C语言源程序中的注释全部删去。

#include <stdio.h> #include <ctype.h> #include <string.h> #include <malloc.h> // 删除注释 void Pack(FILE *src, FILE *dst); int main() { char sname[1024], dname[1024]; FILE *sfile, *dfile; gets(sname); gets(dname); .

raining_day101的博客 3437

Diffusion:如何从噪声中生成清晰图像

扩散模型是当前AI图像生成领域的核心基础,如Stable Diffusion、DALL·E等热门模型均采用该技术。其原理分为训练和推理两个阶段:训练时通过逐步加噪图片,让AI学习如何去除噪声;推理时则从随机噪声出发,结合文本提示逐步去噪生成清晰图像。模型架构通常包含文本编码器、生成模型(如U-Net)和解码器三部分,通过多轮迭代将低维潜在空间表示转化为最终图像。这种技术模拟了艺术家从混沌中雕琢作品的过程,实现了从随机噪声到目标图像的智能生成。

laumy的学习笔记 1273

SenseVoice 实测,阿里开源语音大模型,识别效果和效率优于 Whisper,居然还能检测掌声、笑声!5分钟带你部署体验

阿里开源语音大模型:语音识别效果和性能强于 Whisper,还能检测掌声、笑声、咳嗽等

u010522887的专栏 4万+

删除文件中的注释(C语言)

【题目描述】删除文件中的注释:将C语言源程序(hello.c)文件中的所有注释去掉后存入另一个文件(new_hello.c)。暂时没有想到好的方法,生气!

dream_aleaf的博客 1025

Solidworks钣金设计:折弯系数、K因子与折弯扣除的实战应用解析

本文深入解析Solidworks钣金设计中折弯系数、K因子与折弯扣除的核心概念与实战应用。通过厘清三者间的逻辑关系与换算方法,并结合材料特性、工艺参数及车间实测,指导工程师精准确定展开长度,确保设计图纸与加工实物的一致性,有效提升钣金件设计精度与生产效率。

weixin_29268267的博客 915

删除C文件中的注释

删除C文件中的注释 今天是C语言课后的一道题目,感觉比较有趣,刚开始一直没有相通,花了很长时间,后来想到了一种解决办法,在这里分享一下,有其他办法的也可在评论区留言大家交流。 题目描述 删除文件中的注释:将C语言源程序(hello.c)文件中的所有注释去掉后存入另一个文件(new_hello.c) 问题分析 注释有两种,多行注释(“/* /”)和单行注释(“// ”)。 解决思路如下: ...

qq_41970098的博客 9817

Vmware虚拟机一打开就蓝屏解决方法

Vmware虚拟机一打开就蓝屏解决方法 问题: 一打开Vmware虚拟机就蓝屏,如下图所示: 解决方法1: 启用和关闭windows功能(对话框)——>虚拟机平台(选项打对勾,默认没勾选)——>确定后重启——>再进应该就好了。 解决方法2: ①.查看电脑中的Hyper-V服务是否关闭 1.打开控制面板-程序-程序和功能 2.双击启用或关闭Windows功能 3.把Hyper-V前面的勾去掉 如果后期发下没有反应,或者电脑本身Hyper-V的服务没有打开,可以先打开在关闭,试

m0_55901666的博客 26万+

目标检测——布匹缺陷检测数据集

结构瑕疵指的是布料本身的缺陷,包括嵌结、抽纱、错纱、断纱、预缩等问题,这些问题通常是在布料生产过程中出现的。而质量瑕疵则是指布料在使用过程中出现的问题,如污渍、断裂、鼓囊、针眼等,这些问题可能由生产过程中的结构瑕疵导致,也可能是在运输、存放和使用过程中引起的。布匹瑕疵如缺纬、断纬、粗纬、松纬、缺经、断经、粗经、筘痕、污点、破损等,若未得到及时有效的检测,这些瑕疵产品可能会流向市场,导致消费者的不满和退货,严重影响企业的声誉和品牌形象。织疵包括缺经、缺纬、跳花、弓纱、错纱、厚薄段、油污渍等;

zzjlhlcd的博客 612

【C | PTA】数组进阶练习(三)

本文结合PTA专项练习带领读者掌握数组,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。

等风来 9475

软件工程实验报告--用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

m0_73814332的博客 4160

【C/PTA】数组进阶练习(二)

本文结合PTA专项练习带领读者掌握数组,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。

等风来 9711

雷达参数的设置

采样率又可以叫做采样速率或者,顾名思义就是每秒采集的次数。该值越高,单位时间内对信号的采集越多,采样率的单位可以用Hz或者sps表示(sps是采样率,是每秒采样点的数量,sp表示采样点数),一般1sps=1Hz。采样时间是采样点数和采样周期的乘积得到的结果。假设实际采样率为4560ksps,采样点数为256,那么采样周期为1/4560(ms),那么ADC的采样时间就为256*(1/4560)(ms)=0.056ms=56微秒。

qq_50974341的博客 1911

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

浙大版《C语言程序设计(第4版)》题目集参考思路集

@[TOC]目录 函数题 1. 求m到n之和 2. 找两个数中最大者 3. 字符金字塔 4. 符号函数 5. 使用函数求奇数和 6. 使用函数计算两点间的距离 7. 使用函数求素数和 8. 使用函数统计指定数字的个数 9. 使用函数输出水仙花数 10. 使用函数求余弦函数的近似值 11. 空心的数字金字塔 12. 分类统计字符个数 13. 使用函数求特殊a串数列和 14. 使用函数输出指定范围内的完数 15. 使用函数输出指定范围内的Fib

weixin_61168459的博客 1693

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

pta——数据结构实验三

pta题库:①7-1运用循环单链表实现约瑟夫问题;②7-2运用顺序表实现多项式相加;③7-3两个序列的中位数。

m0_68059337的博客 1951

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++函数模板实现数组排序的工程实践指南

函数模板是C++泛型编程的核心机制,其本质是通过类型参数化实现算法与数据结构的解耦。理解模板参数推导、引用折叠、SFINAE约束等原理,有助于构建类型安全、内存可靠、可跨平台复用的通用组件。在实际工程中,函数模板广泛应用于容器操作、算法封装与接口抽象,显著提升代码复用率与维护性。尤其在PTA、PAT、蓝桥杯等编程评测场景中,正确设计支持int/double/string等类型的排序模板,需兼顾编译期类型检查、运行时内存安全与STL兼容性。本文以‘数组排序输出’为切入点,详解模板声明、迭代器适配、size_t

weixin_33889245的博客 313

Tango3/Romeo2无线驱动实战:从芯片手册到稳定通信的避坑指南

在嵌入式无线通信领域,理解底层驱动原理是确保系统稳定运行的关键。驱动作为连接MCU与射频芯片的桥梁,其核心在于通过中断机制和状态机管理,实现数据的精确收发。这种设计模式在资源受限的8位MCU平台上尤为重要,它能有效平衡实时性与功耗。从技术价值看,掌握驱动配置与调试能力,能显著提升无线传感节点等应用的可靠性与开发效率。具体到应用场景,如基于Freescale MC9S08/HC908系列MCU的315MHz/434MHz ISM频段无线传感网络,开发者常需集成Tango3发射器和Romeo2接收器驱动。然而,

weixin_30514745的博客 415

c语言删除文件注释,C语言删除文件夹下所有代码的注释for Mac

#include#include#includechar b[1000000];void delete(char a[]){int i,j=0;for(i=0;a[i];i++){if(a[i]=='/'&& a[i+1]=='/')//删除//类型的注释{while(a[i]!='\n'){printf("%c",a[i]);i++;}printf("\n");}else if(...

weixin_35698659的博客 247

怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想

K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套”。 如果不考虑字符常量和字符串常量,问题确实很简单。只需要去掉//和/* */的注释。 考虑到字符常量'\''和字符串常量"he\"/*hehe*/",还有类似<secure/_stdio.h>的头文件路径符号以及表达式5/3中...

weixin_30457465的博客 1231

src源dst目的

src是source的缩写,表示源 dst是destination的缩写,表示目的 知道缩写是什么意思了,真不错! 挺好的,真不知道为啥发不出去,是不是太短了; 我就是把csdn当作记事本来用的,只是为了记笔记的; ...

weixin_47104688的博客 7735

src源dst目标

dst是destination的缩写,表目的src是source的缩写,表源

weixin_34191845的博客 7268

去除C程序中的注释

去除C程序中的注释 一、问题简述 在给出一段c语言代码后,删除其中的注释部分,其余部分不变。C语言中的注释为/**/,不考虑c++中的单行注释//。 确保给出的c程序的正确性。 二、背景题目 描述 C程序的注释用/*…*/来表示。请写一个程序,将输入的C程序源代码中的注释去掉,输出去掉注释之后的源代码。用于测试的C代码保证符合语法,不使用C++的//注释语法。注意,C语言不允许出现嵌套注释。具体来说,对于/*/**/"*/",如果不允许嵌套注释,那么它表示字符串"*/";如果允许嵌套注释,它表示一个

m0_48508203的博客 3953

c 程序设计语言之第一章练习1-23 去除C文件中的注释行

题目 编写一个删除C语言程序中的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。 解题思路 首先判断此行是否是注释行,单行注释和多行注释分开判断,是返回1,否则返回0 如果是单行注释,且出现在行尾,找出‘//’出现的下标,用于字符串拷贝的结束下标。 如果不是注释行进行字符串的拷贝。

weixin_35967193的博客 520
上一篇: 【PTA】6-2 读文章(*) (31 分)
下一篇: 【Java】java基础
Sancean
博客等级 码龄6年 2472粉丝 149原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值