【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_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef enum TAG{
    TAGBEGIN,
    TAGEND,
}TAG;
typedef enum STATE{
    SUCCESS,
    NO_MATCH,
}STATE;
STATE Annotation_Convert(FILE *infile, FILE *outfile)
{
    TAG tag = TAGEND;
    assert(infile);
    assert(outfile);
    char firstCh, secondCh;
    do
    {
        firstCh = fgetc(infile);
        switch (firstCh)
        {
        case ‘/‘:
            secondCh = fgetc(infile);
            if (secondCh == ‘*‘ && tag == TAGEND)//处理一般情况以及匹配情况
            {
                fputc(‘/‘, outfile);
                fputc(‘/‘, outfile);
                tag = TAGBEGIN;
            }
            else
            {
                fputc(firstCh, outfile);
                fputc(secondCh, outfile);
                if (secondCh == ‘/‘)//处理C++注释情况:// /*abcdefgh*/
                {
                    char next;
                    do
                    {
                        next = fgetc(infile);
                        fputc(next,outfile);
                    } while (next != ‘\n‘ && next != EOF);
                }
            }
            break;
        case ‘*‘:
            secondCh = fgetc(infile);
            if (secondCh == ‘/‘)
            {
                char next = fgetc(infile);
                if (next != ‘\n‘ && next != EOF)//处理换行问题/*int i = 0;*/ in t j = 0;
                {                               //以及连续注释/**//**/情况
                    fputc(‘\n‘, outfile);
                    fseek(infile, -1, SEEK_CUR);
                }
                tag = TAGEND;
            }
            else//处理连续**/情况:/********/
            {
                fputc(firstCh, outfile);
                fseek(infile, -1, SEEK_CUR);
            }
            break;
        case ‘\n‘:
            fputc(‘\n‘, outfile);
            if (tag == TAGBEGIN)//处理多行注释情况/*int i = 0;
            {                           //          int j = 0;
                fputc(‘/‘, outfile);    //        */int m = 0;
                fputc(‘/‘, outfile);
            }
            break;
        default:
            fputc(firstCh, outfile);
            break;
        }
    } while (firstCh != EOF);
    if (tag == TAGEND)
    {
        return SUCCESS;
    }
    else
    {
        return NO_MATCH;
    }

}
int main()
{
    STATE s;
    FILE *infile = fopen("input3.c", "r");
    FILE *outfile = fopen("output3.c", "w");
    if (infile == NULL)
    {
        perror("error");
        exit(EXIT_FAILURE);
    }
    if (outfile == NULL)
    {
        fclose(infile);
        perror("error");
        exit(EXIT_FAILURE);
    }
    s = Annotation_Convert(infile, outfile);
    if (s == SUCCESS)
    {
        printf("匹配成功!\n");
    }
    if (s == NO_MATCH)
    {
        printf("不匹配!\n");
    }
    fclose(infile);
    fclose(outfile);
    return 0;
}

input.c

output.c

时间: 2024-10-18 08:32:24

【C语言】C语言注释转换成C++注释。的相关文章

将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

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

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

将C语言宏定义数值转换成字符串!

将C语言宏定义转换成字符串! 摘自:https://blog.csdn.net/happen23/article/details/50602667 2016年01月28日 19:15:47 六个九十度 阅读数:10185 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/happen23/article/details/50602667 适用场景举例 流媒体处理系统中,采样率是个很重要的参数,很多地方都要用,如果用来分配内存,则 #define S

C语言 将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数 函数原型:double my_atof(char *str)

编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数.负浮点数) 例如:"12.34"  返回12.34 "-123.34" 返回-123.34 函数原型:doublemy_atof(char *str) 提示: 需要在函数中判断负号,小数点,还要判断是不是数字字符.在判断小数点时需定义一个计数器来计算小数点后数字字符的个数. #include <stdio.h> #include <math.h> double my_at

【C语言】数字字符串转换成这个字符串对应的数字。

(1) int ascii_to_integer(char *str)函数实现. 要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数.如果字符串参数包含任何非数字字符,函数就返回零.不必担心算数溢出. 提示:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加. 直接上代码: #include <stdio.h> #include <assert.h> int ascii_to_integer(char *str) { in

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