问题描述

  编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。

  Write a program to remove all comments from a C program. Don't forget to handle quoted strings and character constants properly. C comments do not nest.

解题思路

1.我们要知道注释有两种,一种是单行注释(//123456),另一种是多行注释(/*123456*/)

2.开始进入单行注释的标志是,遇到两个斜杠‘ // ’ , 结束标志是换行 ' \n '

3.开始进入多行注释的标志是,遇到 ' /* ' ,  结束标志是  ' */ '

4.所以我们设置一个变量来判断字符在注释内还是注释外,注释内不输出,注释外输出

5.如果出现这种语句:

printf("注释语句为/*123456*/");

  双引号内的内容是要打印的,要输出

6.所以我们要保证,在判断注释语句的标志时,字符不在双引号内

代码实现

 #include<stdio.h>
#define MAXLEN 1024 int getlines(int array[] , int maxlen);//将输入读入数组 int main()
{
int array[MAXLEN];
int len;
int i=;
int in_quote=;//判断是否在引用内
int in_commentm=;//判断是否在多行注释内
int in_comment;//判断是否在单行注释内
while ((len = getlines(array , MAXLEN)) > )
{
while(i < len)
{
if (array[i]=='"')
{
in_quote = ;
}
if (in_quote== && array[i]=='"')
{
in_quote = ;
} if (in_quote==)
{
if (array[i] == '/' && array[i+] == '*')
{
i = i+;
in_commentm = ;
}
if (array[i] == '/' && array[i+] == '/')
{
i = i+;
in_comment = ;
}
if (array[i]=='\n')
{
in_comment = ;
} if (array[i] == '*' && array[i+] == '/')
{
i = i+;
in_commentm = ;
}
if (in_commentm== || in_comment==)//注释内的字符全部略过,不输出
{
i++;
}else
{
printf("%c",array[i]);
i++;
}
}else
{
printf("%c",array[i]);
i++;
}
}
i = ;
}
return ;
} int getlines(int array[] , int maxlen)
{
int c,i;
for ( i = ; i < maxlen- && (c=getchar())!=EOF; i++)
{
array[i] = c;
}
array[i] = '\0';
return i;
}

运行结果

《C程序设计语言》 练习1-23的更多相关文章

  1. 扩展《C程序设计语言》练习2-3程序通用性

    最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...

  2. 《C程序设计语言》 练习2-3

    问题描述 < class="title-article"> 练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的 ...

  3. awk程序设计语言之-awk基础

    awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...

  4. 《C++程序设计语言(十周年纪念版)》【PDF】下载

    <C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...

  5. 《C++程序设计语言(英文第四版)》【PDF】下载

    <C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参 ...

  6. 基于C#程序设计语言的三种组合算法

    目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...

  7. Notes 20180506 : Java程序设计语言概述

    2.Java程序设计语言概述 如果对于开发语言的排行榜有所关注的话,那么会发现很长一段时间以来Java都是位居榜首的高级开发语言,作为一个Java开发者,为此感到骄傲的同时也深感忧虑,骄傲的是自己接触 ...

  8. c++学习书籍推荐《C++程序设计语言(特别版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++程序设计语言(特别版•十周年中文纪念版)>编辑推荐:十周年纪念版,体味C++语言的精妙与魅力,享受与大师的心灵对话.1979年,Biarn ...

  9. AWK程序设计语言

    一. AWK入门指南 Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务.本章是个入门指南,让你能够尽快地开始编写你自己的程序.第二章将描述整个语言,而剩下的章节将向你展示 ...

  10. 操作系统和程序设计语言的API使用的字符编码分析

     1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...

随机推荐

  1. String 对象-->substring() 方法

    1.定义和用法 substring() 方法用于提取两个指定下标之间的字符. substring() 方法返回的子串包括 开始 处的字符,但不包括 结束 处的字符 语法: string.substri ...

  2. python3(十九)Partial func

    # 偏函数(Partial function) # 如int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换 # 但int()函数还提供额外的base参数,默认值为10 ...

  3. python3(十四) filter

    # 和map()类似,filter()也接收一个函数和一个序列. # 和map()不同的是,filter()把传入的函数依次作用于每个元素, # 然后根据返回值是True还是False决定保留还是丢弃 ...

  4. Linux远程登陆

    Linux 远程登录 Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ss ...

  5. 012-C语言小游戏之推箱子

    012-C语言小游戏之推箱子 一.创建游戏地图   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #define ROWS 11 #define COLS 12   char ...

  6. 利用Ajax实现异步请求

    Ajax 1.课程引入      静态网站和动态网站都是同步的,但同步方式有缺点:页面请求响应式阻塞,影响用户体验      为了解决这个问题,可以通过变通的手段实现页面的局部更新(隐藏帧),由于隐藏 ...

  7. 别再问我 new 字符串创建了几个对象了!我来证明给你看!

    我想所有 Java 程序员都曾被这个 new String 的问题困扰过,这是一道高频的 Java 面试题,但可惜的是网上众说纷纭,竟然找不到标准的答案.有人说创建了 1 个对象,也有人说创建了 2 ...

  8. poi导出word文档,doc和docx

    maven <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <gro ...

  9. CISCN love_math和roarctf的easy_clac学习分析

    Love_math 题目源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET['c'])){ show ...

  10. PHP代码审计理解(二)----齐博CMS7.0文件覆盖

    0x00 前言 因为我是跟着视频操作的,这回真的没理解为什么定位到了这个存在漏洞的文件... /do/fujsarticle.php 因为没有前文,所以这里无法分析这个$FileName为什么可以$_ ...