注释转化程序

注释转化就是将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;
}

猜你喜欢

转载自blog.csdn.net/oldwang1999/article/details/80802270