zoukankan      html  css  js  c++  java
  • 凝视转换(部分)

    #include <stdio.h>
    #include <errno.h>
    #include <assert.h>
    
    typedef enum STATE
    {
    	SUCCESS,	// 成功
    	FILE_ERROE,	// 文件错误
    	NO_MATCH,	// 不匹配
    	OTHER,		// 其它错误
    }STATE;
    
    typedef enum TAG
    {
    	TAG_BEGIN,		// 在C凝视段中
    	TAG_END,		// C凝视结束
    }TAG;
    
    #pragma warning(disable:4996)
    
    STATE AnnotationConvert(FILE* inFile, FILE* outFile)
    {
    	TAG tag = TAG_END;
    	char firstCh, secondCh;
    	assert(inFile);
    	assert(outFile);
    
    	do{
    		firstCh = fgetc(inFile);
    		switch (firstCh){
    		case '/':
    			secondCh = fgetc(inFile);
    			if (secondCh == '*'&& tag == TAG_END)
    			{
    				fputc('/', outFile);
    				fputc('/', outFile);
    
    				tag = TAG_BEGIN;
    			}
    		
    			else
    			{
    				fputc(firstCh, outFile);
    				fputc(secondCh, outFile);
    				if (secondCh == '/')
    				{
    					char next = fgetc(inFile);
    					while ((next != '
    ')&&(next!=EOF))
    					{
    						next = fgetc(inFile);
    						fputc(next, outFile);
    					} 
    				}
    			}
    			break;
    		case '
    ':
    			fputc('
    ', outFile);
    			if (tag == TAG_BEGIN)
    			{
    				fputc('/', outFile);
    				fputc('/', outFile);
    			}
    			break;
    		case '*':
    			secondCh = fgetc(inFile);
    			if (secondCh == '/'&&tag==TAG_BEGIN)
    			{
    				char next = fgetc(inFile);
    				if (next != '
    ' && next != EOF)
    				{
    					fseek(inFile, -1, SEEK_CUR);
    				}
    				if (next == EOF)
    				{
    					firstCh = EOF;
    				}
    
    				tag = TAG_END;
    			}
    			else
    			{
    				fputc(firstCh, outFile);
    				fseek(inFile, -1, SEEK_CUR);
    			}
    			fputc('
    ', outFile);
    			break;
    		default:
    			fputc(firstCh, outFile);
    			break;
    		}
    	} while (firstCh != EOF);
    
    	if (tag == TAG_END)
    	{
    		return SUCCESS;
    	}
    	else
    	{
    		return NO_MATCH;
    	}
    }
    
    int StartConvert()
    {
    	STATE s;
    	const char* inFileName = "input.c";
    	const char* outFileName = "output.c";
    
    	FILE* inFile = fopen(inFileName, "r");
    	FILE* outFile = fopen(outFileName, "w");
    
    	if (inFile == NULL)
    	{
    		return FILE_ERROE;
    	}
    
    	if (outFile == NULL)
    	{
    		fclose(inFile);
    		return FILE_ERROE;
    	}
    
    	s = AnnotationConvert(inFile, outFile);
    
    	fclose(inFile);
    	fclose(outFile);
    
    	return s;
    }
    
    int main()
    {
    	STATE ret = StartConvert();
    
    	if (ret == SUCCESS)
    	{
    		printf("转换成功
    ");
    	}
    	else if (ret == NO_MATCH)
    	{
    		printf("不匹配
    ");
    	}
    	else if (ret == FILE_ERROE)
    	{
    		printf("文件错误: %d
    ", errno);
    	}
    	else
    	{
    		printf("其它错误: %d
    ", errno);
    	}
    
    	return 0;
    }


    
       
    
  • 相关阅读:
    js实现对身份证校验
    zip解压缩
    zip压缩
    文件内容编解码
    文件的操作
    Mysql账号管理
    深度优先算法DFS
    Java常见知识问答
    Hibernate的单向OneToMany、单向ManyToOne
    Angularjs在线编辑器
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7040795.html
Copyright © 2011-2022 走看看