注释转换 ——C++注释转换为标准C语言注释

具体要求:

1:C++风格的注释//注释转换为标准C分风格/* */注释

2:/*  */风格的注释保持原样

3:所有的转换需要符合语法规则

4:注释转换需要支持注释嵌套

转换要求:

注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子。
1、单行注释或没有嵌套,注释行直接转换,如:
     ①//123                             /* 123 */
     ②/* 123 */                       /* 123 */ 不变
     ③/*123
         */                                   保持原样
2、有嵌套的注释(一个注释中还有嵌套其他注释符号//,/* */)嵌套中多余的每个注释符号用两个空格代替。

如单行:
 ① //123 /*456 */                            /*123   456*/
 ②//123//456                                   /*123   456*/ 
 ③//123*//*456                               /*123     456*/
如跨行
    /*……..                                         /*……..
    //………                                        ……….
    // ……..                                         ……….
    */                                                    */

注意事项:

1、除以下两种情况的修改,源文件转换后不能有任何其它的修改:
 ①多余的注释符用空格代替
 ②//在注释开始替换为/* ,行尾增加*/
2、下面的3种情形无需转换
 ① /* 123 */ /* 456 */
 ②/* 123 */ /* 456
    */ 
 ③/* 123
     */ /* 456
      */
3、不需要考虑输入文件中不符合语法规则的注释


主函数代码块:


#include
using namespace std;

extern int CommentConvert(FILE *inputfile, FILE *outputfile);

  
int main()
{
	FILE *fpIn = NULL;  //inputfile
	FILE *fpOut = NULL; //outputfile

	fpIn = fopen("input.c","r");
	if(NULL == fpIn)
	{
		cout<<"Open input file fail!"<

实现具体功能函数:



#include
using namespace std;

  
extern int CommentConvert(FILE *inputfile, FILE *outputfile);

typedef enum
{
	NO_COMMENT_STATE,
	C_COMMENT_STATE,
	CPP_COMMENT_STATE,
	STR_STATE,
	END_STATE
}STATE_ENUM;

typedef struct
{
	FILE *inputfile;
	FILE *outputfile;
	STATE_ENUM ulstate;
}STATE_MACHINE;

 
STATE_MACHINE g_state = {0};

///////////////////////////////////////////////////
void EventPro(char ch);
void EventProAtNo(char ch);
void EventProAtC(char ch);
void EventProAtCpp(char ch);
void EventProAtStr(char ch);
////////////////////////////////////////////////////

int CommentConvert(FILE *inputfile, FILE *outputfile)
{
	if(inputfile==NULL || outputfile==NULL)
	{
		cout<<"input argument Invalid!"<


你可能感兴趣的:(c++)