2016陕西省ACM省赛 HE 字符串处理 删除注释

HE

发布时间: 2017年3月27日 18:28   最后更新: 2017年3月27日 18:30   时间限制: 1000ms   内存限制: 256M

"Hi there, my name is HE."

在某个秘密的计算机实验室中,超级人工智能计算机 HE 诞生了。

HE 可以在网络中搜索合适的程序代码进行自我升级。在某次升级的过程中,HE 得到了一堆软件代码,其中有很多注释和空行。注释是为了人类能够读懂代码而写的,而对于 HE 来说,它并不需要这些东西,因此它会首先删除掉代码中的所有注释以及空行。

这里定义了2种注释格式:

1.行注释“//”:符号“//”之后直至行尾的所有内容都被认为是注释部分;

2.段注释“/\* ... \*/”:“/\*”表示段注释开始,“\*/”表示段注释结束,其间的所有内容都被认为是注释部分。

科学家发现 HE 的编译器分析部分出现了一些小问题,现在他们希望你能够编写程序帮助 HE 完成这一步骤。

输入文件只有一个,其中有许多包含注释的语言代码,请读至文件末尾(EOF)。

输出删除掉注释之后的代码。

注:
1.若某一行删除完注释之后只剩下空格,则该行也将被视作一个空行,需要一起删除。
2.需要同时删除行末的空格。

 复制
#include<stdio.h>
//test
int main()
{printf("Helloworld.");return 0;
}
#include<stdio.h>
/* ----
---- */int main()
{// testprintf("Goodluck.");     // testreturn 0;   /* -- */
}
#include<stdio.h>
int main()
{printf("Helloworld.");return 0;
}
#include<stdio.h>
int main()
{printf("Goodluck.");return 0;
}
题解:

step1()函数用于去除// 以及/**/这类的注释,把要删除的地方标记为1,输出的时候不输出就可以了

step2()函数用于去除多余的空格以及换行。

思路如下:

每次从一行的开头检测,直到检测到'\n'为止,用pre表示该行第一个空格的位置,如果这一行中有非空格字符,那么标志位f = 1

该行检测完成以后把beg 到 \n区间全部删除掉(置值为1),然后判断f是否为1,如果不为1,那么\n也要删除掉

#include <cstdio>
#include <iostream>
using namespace std;
char str[1000000];
int length;
void read()
{char c;while(~scanf("%c",&c))str[length++] = c;str[length++] = '\n';str[length] = 0;
}
void step1()
{char c = str[0];int pos = 0;while(c){if(c == '/'){if(str[pos + 1] == '/')while(str[pos] != '\n') str[pos++] = 1;else if(str[pos + 1] == '*'){while(str[pos + 2] != '*' || str[pos + 3] != '/') str[pos++] = 1; str[pos] = str[pos + 1] = str[pos + 2] = str[pos + 3] = 1;}}c = str[++pos];}
}
void step2()
{char c = str[0];int pos = 0;while(true){if(pos == length) break;int f = 0;int beg = pos;//本行第一个字符 for(;str[pos] != '\n';pos++){if(str[pos] == 1) continue;//已经被删除过的字符不必考虑在内 if(str[pos] != ' ') {beg = pos + 1;f = 1;}}//pos 指向/nfor(int i = beg;i < pos;i++) str[i] = 1; if(!f) str[pos] = 1;pos ++;}str[length-1] = 1;
}
void print()
{int pos = 0;while(str[pos]){if(str[pos] != 1) putchar(str[pos]);pos++;}
}
int main()
{freopen("test.txt","r",stdin);freopen("out.txt","w",stdout);read();step1();step2();print();
}




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

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

相关文章

SpringBoot2.1.9 MongoDB逻辑操作

一、基础类配置 NoRepositoryBean public interface IMongoRepository<T, ID> extends MongoRepository<T, ID> {String getTableName();void deleteAll(Collection<ID> ids);MongoOperations getMongoOperations();MongoEntityInformation<T, ID> ge…

牛客-Forsaken喜欢独一无二的树【并查集,最小生成树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1221/H 题目大意 给一张图&#xff0c;要求删掉一些边使得最小生成树权值不变&#xff0c;然后求删掉的边的最小权值。 解题思路 我们假设能够构成最小生成树的边权之和为sumsumsum&#xff0c;最小生成树的边权之和为kk…

2016陕西省ACM 热身体B 种类并查集

Energy 发布时间: 2017年3月27日 11:31 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M 描述 人类准备发射载人飞船前往火星。 飞船使用了一种特殊的反物质燃料来作为动力&#xff0c;在飞船的制造期间&#xff0c;同时人类也在从宇宙 的各个地方收集这…

P2519-[HAOI2011]problem a【dp】

正题 题目链接:https://www.luogu.org/problem/P2519 题目大意 nnn个人&#xff0c;第iii个人说aia_iai​个人比他高&#xff0c;bib_ibi​个人比他低&#xff0c;允许有相同分数&#xff0c;求最少多少人在说谎。 解题思路 我们改为求最多有多少人在说真话&#xff0c;我们发…

kubernetes实践之运行aspnetcore webapi微服务

1、预备工作unbuntu 16.04 or abovedocker for linuxkubernetes for linux 集群环境2、使用vs2017创建一个web api应用程序&#xff0c;并打包镜像到本地。3、推送本地镜像到docker hub4、编写k8s资源配置文件(yml)hello-world-deployment.yml如下上面replicas部署两个副本实例…

2016陕西省省赛 ACM Rui and her functions B 二分

Rui and her functions 发布时间: 2017年3月27日 15:45 最后更新: 2017年3月28日 12:43 时间限制: 10000ms 内存限制: 256M 描述 Rui is magnificently gifted. Why does she not play with me tonight? Oh, she is obsessing about nfunctions with nquartette of posi…

使用.NET Core快速开发一个较正规的命令行应用程序

一般命令行程序包含什么&#xff1f;使用方式帮助信息子命令参数选项帮助信息帮助信息如上&#xff0c;介绍了命令的作用和参数、选项作用。这个是必不可少的。子命令一个应用程序打包了多个功能&#xff0c;这时候就可以使用子命令&#xff0c;比如 dotnet ef migrations&…

牛客-乃爱与城市拥挤程度【树形dp】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/B 题目大意 nnn个点的一棵树&#xff0c;对于每个点求 距离该点不超过kkk的点数每个点的权值是以该点为起点长度所有不超过kkk的路径覆盖该点的次数&#xff0c;求所有点的乘积 解题思路 对于第一问我们先考虑在子树…

SpringBoot2.1.9 MongoDB的聚合连接

LookupOperation lookupOperation LookupOperation.newLookup().from(AdminRepository.instance().getTableName()). //关联从表名localField(User.Fields.name). //主表关联字段foreignField(Admin.Fields.name).//从表关联的字段as("adminInfo"); //查询结果…

节操大师 北方大学生程序设计竞赛 南开大学

Description MK和他的小伙伴们&#xff08;共n人&#xff0c;且保证n为2的正整数幂&#xff09;想要比试一下谁更有节操&#xff0c;于是他们组织了一场节操淘汰赛。他们的比赛规则简单而暴力&#xff1a;两人的节操正面相撞&#xff0c;碎的一方出局&#xff0c;而没碎的一方晋…

牛客-仓鼠的石子游戏【博弈论】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/A 题目大意 nnn个环&#xff0c;第iii个环有aia_iai​个珠子。要求涂色时没有相邻的同色。 两个人轮流涂色&#xff0c;直到一个人无法涂色为止。 解题思路 其实先手后手的胜利与他们的操作没有任何关系。 考虑一个…

Window7 docker安装

一、下载docker toolbox docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云 -ce后缀的是免费的版本&#xff0c;其他是收费版本 二、安装 安装完成即可 三、启动docker 双击 Docker Quickstart Terminal启动 其他问题&#xff1a; 启动拉boot2docker镜像失…

aspnetcore.webapi实践k8s健康探测机制 - kubernetes

1、浅析k8s两种健康检查机制Liveness k8s通过liveness来探测微服务的存活性&#xff0c;判断什么时候该重启容器实现自愈。比如访问 Web 服务器时显示 500 内部错误&#xff0c;可能是系统超载&#xff0c;也可能是资源死锁&#xff0c;此时 httpd 进程并没有异常退出&#xff…

dp 树状数组 逆序元组

wmq的队伍 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 2000ms 内存限制: 512M 描述 交大上课需要打卡&#xff0c;于是在上课前的几分钟打卡机前往往会排起长队。 平时早睡早起早早打卡的wmq昨晚失眠&#xff0c;今天起晚了&#xff0c;于是他…

牛客-服务器需求【线段树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101/A 题目大意 nnn天第iii天需要aia_iai​台机器&#xff0c;每台机器可以工作mmm天。qqq次修改&#xff0c;每次修改一个aia_iai​&#xff0c;求每次修改后至少需要雇佣多少台机器。 解题思路 很容易想到答案就是max{…

快速搭建CentOS+ASP.NET Core环境支持WebSocket

以前用python&#xff0c;go尝试在linux下做web服务&#xff0c;python没有强类型支持与高性能&#xff0c;go又没有很好的集成开发环境&#xff08;还有强迫症的语法&#xff09;&#xff0c;回头看了几次.net&#xff0c;都没有时间尝试&#xff0c;现终于实现了这些想法&…

博客文章列表(一)——JAVA

一、成长系列 面试 详情列表 编程难题 详情列表 java总结 详情列表 java技能 详情列表 java面…

Cube Or 北方大学生训练赛

Cube Or Time Limit: 2000/2000 MS(Java/Others) Memory Limit: 262144/262144 K(Java/Others) Problem Description : Given you N Integers ai (1≤i≤N) , you can do thefollowing operation: pick out …

牛客-沙漠点列【tarjan】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101#question 题目大意 nnn个点mmm条边的沙漠(所有联通子图都是仙人掌)&#xff0c;删除kkk个点使得剩下的连通块最多。 解题思路 对于图上的每条割边&#xff0c;删去之后就可以多出一个联通块&#xff0c;所以我们就可…

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor &#xff0c;将.NET带回到浏览器.这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东…