欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

注释转化程序

程序员文章站 2022-07-14 16:38:31
...

注释转化就是将c注释(/*.....*/)转化成c++注释(//.....)

注释转化程序

看代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
enum zhuangtai
{
	KONG,
	C,
	CPP,
	END,
};
void cppzhuangtai(FILE*pfin, FILE*pfout, enum zhuangtai  *state)
{
	int first = 0;
	first = fgetc(pfin);//从文件中读取一个字符 来判断  
	switch (first)
	{
	case '\0':
	{
				 fputc(first, pfout);//遇到/0换行
				 *state = KONG;//状态改为 KONG 
	}
		break;
	case EOF://遇到EOF表示代码结束  
	{

				 fputc(first, pfout);//将EOF输到文件  
				 *state = END;//状态改为 END  
	}
		break;
	default://表示遇到的不是注释 ,状态不变   
	{
				fputc(first, pfout); //将读取的字符输出到文件  
	}
		break;
	}
}
void czhuangtai(FILE*pfin, FILE*pfout, enum zhuangtai  *state)
{
	int first = 0;
	first = fgetc(pfin);//从文件中读取一个字符 来判断  
	switch (first)
	{
	case '\n':
	{
				 fputc(first, pfout);//遇到\0换行
				 *state = KONG;//状态改为 KONG 
	}
		break;
	case EOF://遇到EOF表示代码结束  
	{

				 fputc(first, pfout);//将EOF输到文件  
				 *state = END;//状态改为 END  
	}
		break;
	default://表示遇到的不是注释  ,状态不变   
	{
				fputc(first, pfout); //将读取的字符输出到文件  
	}
		break;
	}
}
void kongzhuangtai(FILE*pfin, FILE*pfout, enum zhuangtai  *state)
{
	int first = 0;
	int second = 0;
	first = fgetc(pfin);//从文件中读取一个字符 来判断  
	switch (first)
	{
	case '/'://表示要进入注释状态   
	{
				 second = fgetc(pfin);//再从文件中读取一个字符  判断  
				 switch (second)
				 {
				 case '*'://表示代码是 /*  表示进入C语言注释状态  
				 {
							  fputc(first, pfout);//将它改为C++注释 输出到文件  
							  fputc(first, pfout);
							  *state = C;//状态转换为  C注释状态  
				 }
					 break;
				 case '/'://表示代码是 //  表示进入C++注释状态  
				 {
							  fputc(first, pfout);//将注释输出到文件  
							  fputc(second, pfout);
							  *state = CPP;  //状态转换为  C++注释状态  
				 }
					 break;
				 default:   //表示这个'/ '是字符   
				 {
								fputc(first, pfout); //将读取到的字符输出到文件  
								fputc(second, pfout);
				 }
					 break;
				 }
	}
		break;
	case EOF://遇到EOF表示代码结束  
	{

				 fputc(first, pfout);//将EOF输到文件  
				 *state = END;//状态改为 END  
	}
		break;
	default://表示遇到的不是注释,状态不变   
	{
				fputc(first, pfout); //将读取的字符输出到文件  
	}
		break;
	}
}
void zhuanhua(FILE*pfin, FILE*pfout)
{
	enum zhuangtai state = KONG;
	while (state != END)
	{
		switch (state)
		{
		case KONG:
			kongzhuangtai(pfin, pfout, &state);
			break;
		case C:
			czhuangtai(pfin, pfout, &state);
			break;
		case CPP:
			cppzhuangtai(pfin, pfout, &state);
			break;
		default:
			break;
		}
	}
}
int main()
{
	FILE *pfin = fopen("input.c", "r");//在input.c中 读取一个字符
	FILE *pfout = fopen("output.c", "w");//在output.c中 写入一个字符
	if (pfin == NULL)
	{
   		exit(1);//读到空指针 退出程序
	}
	if (pfout == NULL)
	{
		fclose(pfin);
		exit(1);//写入空指针 关闭读取的打开文件 然后退出程序
	}
	zhuanhua(pfin, pfout);
	printf("转化成功\n");
	fclose(pfin);
	fclose(pfout);
	system("pause");
	return 0;
}