(一) 将C语言的注释转化为C++的注释,我们可以分为7种情况:

  

// 1.一般情况

/* int i = 0; */

// 2.换行问题

/* int i = 0; */int j = 0;

/* int i = 0; */

int h = 0;

// 3.匹配问题

/*int i = 0;/*xxxxx*/

// 4.多行注释问题

/*

int i=0;

int j = 0;

int k = 0;

*/int k = 0;

// 5.连续注释问题

/**//**/

// 6.连续的**/问题

/***/

// 7.C++注释问题

// /*xxxxxxxxxxxx*/

以下是代码的实现:

enum FILE{	FILE_ERROR,	FILE_SUCCESS};typedef enum State{	C_STAR,	C_END}State;        FILE *Fread;        FILE *Fwrite;	char first, second;	State tag = C_END;	if ((Fread = fopen("input.c", "r")) == NULL)	{		printf("打开文件失败,error:", errno);		return FILE_ERROR;	}	if ((Fwrite = fopen("output.c", "w")) == NULL)	{		printf("打开文件失败,error:", errno);		return FILE_ERROR;	}	do	{		first = fgetc(Fread);		switch (first)		{			// 一般情况		case '/':			second = fgetc(Fread);			//匹配问题			if (second == '*'&&tag == C_END)			{				fputc('/', Fwrite);				fputc('/', Fwrite);				tag = C_STAR;			}			//c++注释问题			else if (second == '/')			{				char Next = fgetc(Fread);				fputc('/', Fwrite);				fputc('/', Fwrite);				while (Next != '\n'&&Next != EOF)				{					fputc(Next, Fwrite);					Next = fgetc(Fread);				}				fseek(Fread, -1, SEEK_CUR);			}			else			{				fputc(first, Fwrite);				fputc(second, Fwrite);			}			break;		case '*':			second = fgetc(Fread);			//换行问题连续注释问题			if (second == '/')			{				char Next = 0;				Next = fgetc(Fread);				if (Next != '\n'&&Next != EOF)				{					fseek(Fread, -1, SEEK_CUR);					fputc('\n', Fwrite);				}				else				{					fputc('\n', Fwrite);				}				tag = C_END;			}			else if (second == '*')			{				fputc(first, Fwrite);				fseek(Fread, -1, SEEK_CUR);				break;			}			else			{				fputc(first, Fwrite);				fputc(second, Fwrite);			}			break;			//多行注释问题		case '\n':			fputc('\n', Fwrite);			if (tag == C_STAR)			{				fputc('/', Fwrite);				fputc('/', Fwrite);			}			break;		default:			fputc(first, Fwrite);			break;		}	} while (first != EOF);		if (fclose(Fread) != 0)	{		printf("Error in closing read file \n");	}	if (fclose(Fwrite) != 0)	{		printf("Error in closing write file \n");	}

然后来看输出:

// 1.一般情况

// int i = 0; 

// 2.换行问题

// int i = 0; 

int j = 0;

// int i = 0; 

int h = 0;

// 3.匹配问题

//int i = 0;/*xxxxx

// 4.多行注释问题

//

//int i=0;

//int j = 0;

//int k = 0;

//

int k = 0;

// 5.连续注释问题

//

//

// 6.连续的**/问题

//*

// 7.C++注释问题

// /*xxxxxxxxxxxx*/