将c语言注释转换成c++注释

可以分为7种情况

1.一般情况

/* int i = 0; */

2.换行问题

/* 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/

转换之后结果

1.一般情况

// int i = 0;

2.换行问题

// 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/

#include<stdio.h>
#include<assert.h>
#include<errno.h>
#pragma warning (disable:4996)

typedef enum STATE
{
    SUCCEED,  //转换成功
    FILE_ERROR, //文件错误
    NOT_MATCH,  //注释不匹配
    OTHERS,     //其他错误
}STATE;
typedef enum TAG
{
    TAG_BEDIN,//在c注释段内
    TAG_END,  //注释结束
}TAG;

STATE AnnotationConvert(FILE* InFile, FILE* OutFile)
{
    TAG tag = TAG_END;
    char firstch;
    char 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_BEDIN;
                }
                else
                {
                    fputc(firstch, OutFile);
                    fputc(secondch, OutFile);
                    if (secondch == ‘/‘)
                    {
                        char nextch;
                       do
                        {   nextch = fgetc(InFile);

                            fputc(nextch, OutFile);
                        } while (nextch != ‘\n‘ && nextch != EOF);
                    }
                }
                break;
            case(‘\n‘) :
                fputc(firstch, OutFile);
                if (tag == TAG_BEDIN)
                {

                    fputc(‘/‘, OutFile);
                    fputc(‘/‘, OutFile);
                }
                break;
            case(‘*‘) :
                secondch = fgetc(InFile);
                if (secondch == ‘/‘)
                {
                    char nextch = fgetc(InFile);
                    tag = TAG_END;
                    fputc(‘\n‘, OutFile);
                    if (nextch == ‘/‘)
                    {
                        fseek(InFile, -1, SEEK_CUR);
                    }
                    else if (nextch != ‘\n‘)
                    {
                        fputc(nextch, OutFile);
                    }
                }
                else
                {
                    fputc(firstch, OutFile);
                    fseek(InFile, -1, SEEK_CUR);
                }
                break;
            default:
                fputc(firstch, OutFile);
                break;
        }

    } while (firstch != EOF);
    if (tag == TAG_END)
    {
        return SUCCEED;
    }
    else
        return NOT_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)
    {
        perror("input.c");
        return FILE_ERROR;
    }
    if (OutFile == NULL)
    {
        fclose(InFile);
        perror("output.c");
        return FILE_ERROR;
    }
    s = AnnotationConvert(InFile, OutFile);
    fclose(InFile);
    fclose(OutFile);
    return s;
}

int main()
{
    STATE ret = startconvert();
    if (ret == SUCCEED)
    {
        printf("转换成功\n");
    }
    else if (ret == NOT_MATCH)
    {
        printf("注释不匹配\n");
    }
    else if (ret == FILE_ERROR)
    {
        printf("文件错误:%d\n", errno);
    }
    else
    {
        printf("其他错误\n");
    }
    getchar();
    return 0;
}
时间: 2024-10-12 20:00:46

将c语言注释转换成c++注释的相关文章

【C语言】C语言注释转换成C++注释。

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/ #define _CRT_SECURE_NO_W

C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)

这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项目的里程碑的时候, 日本的总公司要检查我们的成果物. 成果物包括源代码, 概要设计式样书(SD,System Design), 详细设计式样书(PD, Program Design), 自动化测试等等. 源代码必须要符合编码规范(每个函数都要有注释, 方法变量的命名规则等...) 这些检查都很正常,

C语言十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方

#include <stdio.h> /* 十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方: 在16进制中:a(A)=10 b(B)=11 c(C)=12 d(D)=13 e(E)=14 f(F)=15 例如:CE=12*16^1+14*16^0=192+14=206 */ unsigned short int right(unsigned short int num, int n){ return (num<<n) | (num>>(sizeof

C注释转换到C++注释项目

#define _CRT_SECURE_NO_WARNINGS 1 #include"CommentConvert.h" StateType state; void  DoNullState(FILE *read, FILE *write) { int first = fgetc(read); int second = 0; switch (first) { case '/': second = fgetc(read); if (second == '*') { fputc(first

【C语言】注释转换 ——C注释转换为标准C++语言注释

一.具体要求: 1:C风格的注释/* */注释转换为标准C++风格//注释 2://   风格的注释保持原样 3:所有的转换需要符合语法规则 4:注释转换需要支持注释嵌套 二.转换要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子.                                                          三.注意事项: 1.除以下两种情况的修改,源文件转换后不能有任何其它的修改: a.多余的注释

注释转换??——C++注释转换为标准C语言注释

编写注释转化程序,实现对一个C/C++语言程序源文件中注释的转换功能 1.C++风格的注释//注释转换为标准C分风格/* */注释 2./* */风格的注释保持原样 3.所有的转换需要符合语法规则 4.注释转换需要支持注释嵌套 注释转化要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子. 1.单行注释或没有嵌套,注释行直接转换,如: ①//123 /* 123 */ ②/* 123 / / 123 */ 不变 ③/*123 */ 保持原

注释转换(C++到C)

在注释转换的学习中,仍有很多不足,希望大家可以批评改正,谢谢~ 满足条件: 1.C++风格的注释//注释转换为标准C分风格/* */注释 2./*  */风格的注释保持原样 3.所有的转换需要符合语法规则 4.注释转换需要支持注释嵌套 注释转换要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子. 1.单行注释或没有嵌套,注释行直接转换,如: ①//123                             /* 123 */ ②/*

c语言走向c++的第一步,注释转换

最近刚开始学习c++,接触了一个小项目,写一个程序将C语言的注释转化为c++的注释,这个里面也要分很多种情况,下面我就把我做的小程序分享出来,在把C语言注释转化为c++注释的过程中,列举了以下几种情况 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;

注释转换(C语言-&gt;C++)

最近做了一个注释转换的项目,将C语言注释转化为C++格式. 在这个项目中,我用到了有限状态机的思想.有限状态机,简称为状态机(finite-state machine),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型. 我先来介绍一下状态机.状态机简写为FSM(Finite State Machine),主要分为2大类:第一类,若输出只和状态有关而与输入无关,则称为Moore状态机:第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机.要特别注意的是,因为Mealy