一道有意思的C语言编程题

最近在看经典的C语言入门书籍K&R,虽然是一本入门书籍,可是其中的精妙之处却需要慢慢体会。其中的经典题很多,仔细琢磨一定会收获良多。

今天看到这样一道题:编写一个删除C语言程序中所有的注释语句。感觉颇有意思,与大家一起分享一下:

我的思路:

  1. 找到注释的起始符号 \
  2. 判断紧接着的输入字符,如果是*或者是\,则说明后面全是注释,跳过即可,否则照样输出
  3. 其他则直接输出

疑问:

所配套的答案书中提出要考虑引号后面的内容以做出响应,不是很明白这是为什么。个人认为无需考虑引号的影响也能将注释去除,希望有高手能指教一二。

代码:

#include<stdio.h>
void rcomment(int c);
void in_comment(void);
void echo_quote(int c);

/*remove all comments from a valid C program*/
int main()
{
	int c,d;
	while((c=getchar())!=EOF)
	{
		rcomment(c);
	}
	return 0;
}
/*read each character and remove the comments*/
void rcomment(int c)
{
	int d;
	if (c==‘/‘)//search for the beginning of the comments
	{
		if ((d=getchar())==‘*‘||d==‘/‘)
			in_comment();
		else
		{
			putchar(c); 
			putchar(d);
		}
	}
	else 
		putchar(c);

}
/*inside of a valid comment*/
void in_comment()
{
	int c,d;
	c=getchar();
	d=getchar();
	while(c!=‘*‘||d!=‘/‘)
	{
		c=d;
		d=getchar();
	}

}

运行结果截图:

不足之处:

该程序目前只能一行一行的打印。如果能实现把整个文件都打印进去,然后将注释删除就更好了

一道有意思的C语言编程题

时间: 2024-11-07 03:41:50

一道有意思的C语言编程题的相关文章

上海华为的一道关于指针方面的编程题(C/C++)

int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标. 尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路 注:我的方法的复杂度为O(n),大家如果有其它方法希望可以交流一下. /* author: jiangxin Blog: http://blog.csdn.net/jiangxinnju */ #include <ios

算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/5882357.html.看了下,挺有意思,于是就想了想,又写了写,最终撸出来了.刚开始一看顿时感觉很熟悉,大学数据结构和算法课肯定讲过相关东西,什么深度搜索,广度搜索,最优路径,最优解...但是现在你让我说个一二三,我还就只记住几个名字,说不定名字都记错.我向来不喜欢死记东西,能查到的真的不想背下来,而

2018.3 江苏省计算机等级考试 C语言 编程题答案

题目要求:给定一个数字范围,输出满足这些条件: 1.能被3整除: 2.包含数字5, 将满足的数字放在特定的数组里输出.输出这些数里5出现的个数.数字的个数. 想起来有点伤心,本来很简单的题,考试的时候程序写错一行,结果成了死循环,最后还没找出来错,下来以后才想起来.以后必须长点心. 代码: #include<stdio.h>int flag(int x0,int x1,int b[],int *p);int main(){int i,intnumber,fivenumber;//数字的个数.5

C语言编程题002

给出两个整数,L和R,其中L<=A<=B<=R,然后求出A^B值最大的数.其中1<=L<=R<=1000. 比如说L = 1;R = 3; L 0001 R 0011 LR中间还有 0010,其中的最大值是0001 ^ 0010 = 0011;输出就是2. 写出一个函数计算这个数: 我写了一个,但是没通过最终测试,只有12分,总分20分,不知道哪里还需要改进? 1 #include <stdio.h> 2 #include <string.h>

C语言编程题001

有一颗树,一年两个生长周期,春天它长高一倍,夏天长高1m,问N个周期后树有多高?假设从春天开始树高为1m,第0个周期树高为1m. 要求:1.可以同时输入多个生长周期 如:3//表示下面有几个生长周期 0 1 4 输出结果为:1 2 7 不知道写的对不对,大家看一下啊 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <stdlib.h> 5 6 int main

一道考察数组知识的编程题

今天先贴代码,下次补上整体思路与后续优化 题目:假设有一个集合 ['foo', 'bar', 'hello', 'world'],求这个集合里单词组合起来的所有不同的结果. 1 let arr = ['foo', 'bar', 'hello', 'world'], 2 str = '', 3 newArr = [], 4 results = []; 5 6 for (let i = 0; i < 99; i++) { 7 newArr.push(arr.sort(() => { 8 retur

C语言编程题

1.递归 汉诺塔是由三根杆子A,B,C组成的.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘:大盘不能叠在小盘上面.提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则.问:如何移? void MoveHanoi(int iCnt, char* pSrc, char* pMid, char* pDest) { if (iCnt == 1) { printf(" %s->%s\n&qu

几个有意思的运维编程题

使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为:   coaolvajcq_oldboy.html  qnvuxvicni_oldboy.html  vioesjmcbu_oldboy.html gmkhrancxh_oldboy.html  tmdjormaxr_oldboy.html  wzewnojiwe_oldboy.html jdxexendbe_oldboy.html  ugaywanjlm_oldboy.ht

一道编程题实在是不知道哪个地方错了

求帮忙 一道觉得很简单的编程题,提交了很多次,但是,还是wrong,实在是崩溃啊,真的不知道哪里错了,希望大家可以帮忙解决一下,感激不尽. 就是这道题----Conversions Description Conversion between the metric and English measurement systems is relatively simple. Often, it involves either multiplying or dividing by a constant