註釋轉換(C++小項目)

將所有以C語言格式的註釋轉換成C++註釋格式,利用文件指針打開文件並讀寫文件,input,output導入導出文件,轉換後不得改變原文件的含義並且編譯連接無錯誤,所有的轉換必須符合語法規則,註釋轉換支持註釋嵌套。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef enum ConverState
{
	c_open,
	c_close
}ConverState;
typedef enum State
{
	SUCCESS,
	FILE_ERROR,
	NO_MATCH
}State;

ConverState Convert(FILE *fIn, FILE *fOut)
{
	State ret = SUCCESS;
	char first, second, get;
	ConverState tag = c_close;
	assert(fIn);
	assert(fOut);
	get = fgetc(fIn);
	do{
		first = get;
		switch (first)
		{
			case '/'://正常問題
				second = fgetc(fIn);
				if (second == '/')
				{
					// 7.C++註釋問題
					fputc('/', fOut);
					while (get != '\n')
					{
						fputc(get, fOut);
						get = fgetc(fIn);
					}
					fseek(fIn, -1, SEEK_CUR);
				}
				else if (second == '*')
				{    // 3.匹配問題
					if (tag==c_close)
					{
						fputc('/', fOut);
						fputc('/', fOut);
						tag = c_open;
					}
					else 
					{
						fputc('/', fOut);
						fputc('*', fOut);
					}	
				}
				else 
				{
					fputc(first, fOut);
				}
				break;
			case '*':
				second = fgetc(fIn);
				if (second == '/')
				{    // 2.換行問題
					char next = fgetc(fIn);
					fputc('\n', fOut);
					if (next != '\n'&& next!=EOF)
					{
						// 5.連續註釋問題
						fseek(fIn, -1,SEEK_CUR);
					}
					tag = c_close;
				}
				else
				{
					fputc(first, fOut);
					// 6.連續的**/問題
					fseek(fIn, -1, SEEK_CUR);
				}
				break;
			case'\n':// 4.多行註釋問題
				fputc('\n', fOut);
				if (tag == c_open)
				{
					fputc('/', fOut);
					fputc('/', fOut);
				}
				break;
			default:
				fputc(first, fOut);
				break;		
		}
		get = fgetc(fIn);
	} while (get != EOF);
	return ret;
}

ConverState AnnotationConvert(const char * inputFile, const char * outputFile)
{
	State ret;
	FILE *fOut, *fIn;
	fIn = fopen(inputFile, "r");
	if (fIn == NULL)
	{
		printf("打開文件%s失敗",inputFile);
		return FILE_ERROR;
	}
	fOut = fopen(outputFile, "w");
	if (fOut == NULL)
	{
		fclose(fIn);
		printf("打開文件%s失敗", outputFile);
		return FILE_ERROR;
	}
	ret=Convert(fIn, fOut);
	fclose(fIn);
	fclose(fOut);
	return ret;
}

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