从键盘上读入一行字符(约定:字符数≤127字节),判断其中的注释是否合法,不合法则报错,合法时则删除注释后再输出。合法注释是指“/*”标记注释开始、“*/”标记注释结束,通常表现为/* ……*/。
注意事项:
(1)只考虑行内最多只包含一个注释的情况。
(2)不合法的注释情况有很多种,例如 ……*/缺注释开始标记、/ * ……*/缺注释开始标记、/* ……缺注释结束标记、/* ……* /缺结束标记。
(3)编程可用素材:printf("input a string:")...、printf("Output:\nThe result is :")...、printf("Output:\ncomment is error\n")...。
程序的运行效果应类似地如图1、图2、图3和图4所示,图1中的int main(void){char ch;/*ding yi*/ int i}、图2中的int main(void){char ch;ding yi*/ int i}、图3中的int main(void){char ch;/*ding yi* / int i}和图4中的int main(void){char ch; int i}是从键盘输入的内容。
程序运行效果示例:
#include <string.h>
#include <stdio.h>
int test( char arr[],int num) test函数用途找到"*/"的位置 如果没有就错误
{
int i = 0;
int j = 0;
int len = strlen(arr);
for( i = num + 2 ; arr[i] != '\0';i++)
{
if( arr[i] == '*')
{
if( arr[i+1] == '/')
{
j = i + 2;
return j;
}
else
{
return 0;
}
}
}
return 0;
}
int main()
{
int len = 0;
int i = 0;
int k = 0;
int j = 0;
int z = 0;
char arr[128] = { '\0'};
printf("input a string:");
gets(arr);
len = strlen(arr);
printf("Output:\n");
for( i = 0 ; i < len ;i++)
{
if( arr[i] == '/') 首先判断'/'
{
if( arr[i+1] == '*') //注释的第二个条件
{
z = i;
if( (j = test(arr,z))!=0)
{
for( ; j < len ;j++,z++)
{
arr[z] = arr[j];
}
for( ; z < len ;z++)
{
arr[z] = '\0';
}
printf("The result is :");
printf("%s\n",arr);
return 0;
}
else
{
printf("comment is error\n");
return 0;
}
}
else
{
printf("comment is error\n");
return 0;
}
}
else
{
if( arr[i] == '*')
{
if( arr[i+1] == '/')
{
printf("comment is error\n");
return 0;
}
}
}
}
printf("The result is :");
printf("%s\n",arr);
return 0;
}