【C语言项目】注释转换

原创 2016年05月30日 17:17:33
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

typedef enum ConvertState
{
    SUCCESS,
    FILE_ERROR,
    NO_MATCH,
}ConvertState;

typedef enum State
{
    C_BEGIN,
    C_END,
    CPP_BEGIN,
    CPP_END,

}State;

ConvertState Convert(FILE* fIn, FILE* fOut)
{
    ConvertState ret = SUCCESS;

    char first, second;
    State tag = C_END;
    assert(fIn);
    assert(fOut);
    do
    {
        first = fgetc(fIn);
        switch (first)
        {
        case '/':
            second = fgetc(fIn);
            if (second == '*')
            {
                if (tag == C_END)
                {
                    fputc('/', fOut);
                    fputc('/', fOut);

                    tag = C_BEGIN;
                }
                else
                {
                    fputc('/', fOut);
                    fputc('*', fOut);
                }
            }
            else if (second == '/')
            {
                char next;
                fputc('/', fOut);
                fputc('/', fOut);

                do
                {
                    next = fgetc(fIn);
                    fputc(next, fOut);

                    if (next == EOF)
                    {
                        return ret;
                    }
                } while (next != '\n');
            }
            else
            {
                fputc(first, fOut);
                fputc(second, fOut);

            }
            break;
        case '\n'://多行注释问题
            fputc('\n', fOut);

            if (tag == C_BEGIN)
            {
                fputc('/', fOut);
                fputc('/', fOut);
            }
            break;
        case '*':
            second = fgetc(fIn);
            if (second == '/')
            {
                //换行问题
                char next = fgetc(fIn);

                //连续注释问题
                if (next == '/')
                {
                    fputc('\n', fOut);
                    fseek(fIn, -1, SEEK_CUR);
                }
                else if (next != '\n' && next != EOF)
                {
                    fputc('\n', fOut);
                    fputc(next, fOut);
                }
                else
                {
                    fputc('\n', fOut);
                }

                tag = C_END;
            }
            else if (second == '*')
            {
                fputc(first, fOut);
                fseek(fIn, -1, SEEK_CUR);
            }
            else
            {
                fputc(first, fOut);
                fputc(second, fOut);
            }
            break;
        default:
            if (first != EOF)
                fputc(first, fOut);

            break;
        }
    } while (first != EOF);
    if (tag != C_END)
    {
        ret = NO_MATCH;
    }
    return ret;
}

ConvertState AnnotationConvert(const char* inputFile, const char* outputFile)
{
    ConvertState ret;
    FILE* fIn, *fOut;
    fIn = fopen(inputFile, 'r');
    if (inputFile == NULL)
    {
        printf("打开文件%s失败, errno: %d\n", inputFile, errno);
        return FILE_ERROR;
    }

    fOut = fopen(outputFile, 'w');
    if (outputFile == NULL)
    {
        fclose(fIn);
        printf("打开文件%s失败,errno: %d\n", outputFile, errno);
        return FILE_ERROR;
    }

    ret = convert(fIn,fOut);
    fclose(fIn);
    fclose(fOut);

    return ret;
}
int main()
{
    
}

注释转换--

C语言的注释 -> C++的注释

C语言的注释 /* xxxxx */

C++的注释   //xxxxx


// 1.一般情况
/* int i = 0; */

// 2.换行问题
/* int i = 0; */int j = 0;
/* int i = 0; */
int j = 0;

// 3.匹配问题
/*int i = 0;/*xxxxx*/

// 4.多行注释问题
/*
int i=0;                    
int j = 0;
int k = 0;
*/int k = 0;

// 5.连续注释问题
/**//**/

// 6.连续的**/问题
/***/

// 7.C++注释问题
// /*xxxxxxxxxxxx*/

// 8.C注释本身不匹配
/* int i = 0;


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1743806

C语言注释与C++注释的相互转换

做此项目的经历主要的收获是熟悉了状态机这一方法的使用,还有就是对每实现一个功能就尽量封装一个函数这一概念把握的更为精到。状态机:关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的...
  • ljx_5489464
  • ljx_5489464
  • 2016年03月09日 00:26
  • 833

注释转换——C语言项目

注释转换:将C语言中的注释风格/*...*/转换为C++的注释风格//. 转换方法先分析如下图: 由图可以看出,将注释转换过程分为四种状态,NULL_STATE(无注释状态)、C_STAT...
  • L_XRUI
  • L_XRUI
  • 2016年09月08日 18:54
  • 460

c语言注释转换项目

Annootation conversion.h#ifndef __ANNONTATION_CONVERSION_H__ #define __ANNONTATION_CONVERSION_H__#de...
  • lc578626
  • lc578626
  • 2017年12月07日 16:35
  • 22

c语言小项目---注释转换

```//CommentConvert.h文件 #ifndef __COMMENT_CONVERT_H__ #define __COMMENT_CONVERT_H__ #include #inclu...
  • qq_39539470
  • qq_39539470
  • 2017年09月22日 22:28
  • 87

C语言小项目--注释转换

这里所说的注释转换是指将C风格的注释转换成C++风格的注释。那么我们如何来实现这个目的呢? 首先我们得有一个名为 input.c 的文件 ,里面写着一段C风格的注释和一些代码。而我们转换后的注释及代...
  • daojushige
  • daojushige
  • 2017年12月07日 21:32
  • 12

c语言项目-注释转换

题目要求: 要将全部的c语言风格的注释转换为c++风格的注释,如下图所示,需要将input.c文件经过注释转换程序转换为output.c文件所示 分析: 从input.c文件可以看...
  • qq_33951180
  • qq_33951180
  • 2016年05月25日 23:19
  • 404

c语言小项目----注释转换

这篇博客,我将整理关于注释转换的知识,首先,得知道,注释转换包括,c语言注释转 换成c++注释,和c++注释转换成c语言注释。 c语言注释的风格:/*这是c语言注释*/ c++语言注释风格://这是c...
  • peiyao456
  • peiyao456
  • 2016年05月24日 21:27
  • 999

C语言小项目---注释转换

此项目可以将C语言的注释部分格式转换成c++的注释格式,代码其他的部分不变。 即: 思路:将C语言得到注释转换成c++的注释格式,我们可以定义一个文件指针从我们的源文件中逐次取字符与C...
  • WRNGT
  • WRNGT
  • 2017年02月27日 22:23
  • 201

C语言小项目—注释转换

本次这个小项目的目的是把.c文件中的C风格的注释转换成为C++风格的注释。C注释风格:/**/ C++注释风格://首先我们分析一下会出现的几种状态,以及各种状态之间的转换关系: 首先我们在这里对...
  • qq_26768741
  • qq_26768741
  • 2016年05月22日 17:16
  • 3502

C语言中的注释风格小结

C语言中常用的注释风格有两种,一种是通过如下模式进行一段代码的注释: /* comment*/ 另一种是单行注释符号: // comment        学生时代的注释我一般是选用后者,那时...
  • grey_csdn
  • grey_csdn
  • 2017年04月03日 22:18
  • 683
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C语言项目】注释转换
举报原因:
原因补充:

(最多只允许输入30个字)