C語言註釋轉c++註釋

將c語言的註釋轉換成c++的註釋

/*......*/ 轉成 //......


測試用例:

1.一般情況

/* int a = 0; */


2.連續*

/***/


3.換行問題

/* int b = 0; */ int c = 0;

/* aaa */

int d = 0;


4.匹配問題

/*AAA/*BBB*/

/*int e = 0;/*xxxxxx*/


5.多行註釋

/*

AAA

BBB

CCC

*/int aa;


6.連續註釋

/*aaa*//*bbb*/


7.c++註釋 (遇到c++註釋直接讀完一行)

// /**/

# include<stdio.h>
# include<stdlib.h>

enum Tag      
{
	C_BEGIN,
	C_END,
};

void Convert(const char* fIn,char* fOut)
{
	FILE* Input = fopen(fIn, "r");
	if (NULL == Input)
	{
		printf("打開文件%s失敗\n",fIn);
		return;
	}	
	FILE* Output = fopen(fOut, "w");
	if (NULL == Input)
	{
		printf("打開文件%s失敗\n", fOut);
		return;
	}

	Tag tag = C_END;
	char ch = fgetc(Input);
	char second;
	while (ch != EOF)
	{
		switch (ch)
			{
			case '/':
				fputc('/', Output);
				second = fgetc(Input);
				if (second == '*')
				{
					//4.匹配問題
					if (tag == C_END) 
					{
						fputc('/', Output);
						tag = C_BEGIN;
					}
					else
					{
						fputc('*', Output);
					}
				}
				else if (second == '/')     // 7. 碰到c++註釋,讀完一行
				{
					fputc(second, Output);
					char cur;
					do
					{
						cur = fgetc(Input);
						if (cur == EOF)
						{
							return;
						}
						fputc(cur, Output);
					} while (cur != '\n');
				}
				else
				{
					fputc(second, Output);
				}
				break;
			case '*':
				second = fgetc(Input);
				if (second == '/' && tag == C_BEGIN)   
				{	
					//  3. 換行問題
					char next = fgetc(Input);
					if (next != '\n' && next != EOF)
					{
						fputc('\n', Output);
						fseek(Input, -1, SEEK_CUR); //6.連續註釋  /**//**/
					}
					else
					{
						fputc(next, Output);
					}
					tag = C_END;
				}
				else                      //   2. /***/ 
				{
					fputc('*', Output);
					fseek(Input, -1, SEEK_CUR);
				}
				break;
			case '\n':
				fputc('\n', Output);
				// 5. 多行註釋
				if (tag == C_BEGIN)
				{
					fputc('/', Output);
					fputc('/', Output);
				}
				break;
			default:
				fputc(ch, Output);
		}
		ch = fgetc(Input);
	}
	fclose(Input);
	fclose(Output);
}

void Test()
{
	Convert("Input.cpp","Output.cpp");
}
int main()
{
	Test();
	system("pause");
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章