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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/navicheung/article/details/85708317

C语言程序设计(第二版) 练习1-23 个人设计

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

代码块:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void delete_note(char s[]);                          //定义删除注释函数
int main()
{
	char string[1000];                               //定义一个足够长的字符串容纳程序
	int i;
	printf("Please enter code:\n");
	for (i=0; (string[i]=getchar())!=EOF; i++);      //输入程序,注意程序结尾用文件终止符,同时保证回车作为字符输入字符串内
	string[i]='\0';                                  //程序(即字符串)结尾用终止符
	delete_note(string);                             //调用删除注释函数
	printf("New code:\n");
	puts(string);                                    //输出删除注释后的程序
	system("pause");
	return 0;
}
/*删除注释函数*/
void delete_note(char s[])
{
	int i, j, m, n, len, str;
	len=strlen(s);                                   //测量出程序(即字符串)的长度
	for (i=0, str=0; i<len; i++){
		if (s[i]=='"')                               //24-25行为了判断注释符号是否出现在双引号的字符串内,如果是,str模2不会为0
			str++;
		if (s[i]=='/'&&s[i+1]=='/'&&str%2==0){       //26-30行是判断行注释的条件,同时把注释转换为空格
			for (j=i; s[j]!='\n'; j++)
				s[j]=' ';
			i=j;
		}
		if (s[i]=='/'&&s[i+1]=='*'&&str%2==0){       //31-38行是判断块注释的条件,同时把注释转换为空格
			printf("aha\n");
			for (j=i+1; s[j]!='/'; j++)
				s[j]=' ';
			s[i]=' ';
			s[j]=' ';
			i=j+1;
		}
	}
	for (i=0; i<len; i++)                            //40-45行把已经转换为空格的注释行清除
		if (s[i]=='\n'){
			for (j=i+1; s[j]==' '; j++);
			if (s[j]=='\n')
				for (m=i+1, n=j+1; s[m]!='\0'; s[m++]=s[n++]);
		}
}

猜你喜欢

转载自blog.csdn.net/navicheung/article/details/85708317
今日推荐