版权声明:本文为博主原创文章,未经博主允许不得转载。 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++]);
}
}