C/C++注释转换

将 / * … * / 注释转换为 / / 注释。

transform.h

#ifndef __transform_h__
#define __transform_h__

#define MY_INPUT "input.c"
#define MY_OUTPUT "output.c"

void comment_transform_main();

enum STATUS{ NORSTATUS, CSTATUS, CPPSTATUS, EOFSTATUS };

#endif //__transform_h__

transform.c

#include <stdio.h>
#include<assert.h>
#include"transform.h"

enum STATUS status = NORSTATUS;

//处理正常状态字符
void tra_nor(FILE *ifp, FILE *ofp)
{
    char fc = fgetc(ifp);
    switch (fc)
    {
    case '/':
    {
            fputc('/', ofp);
            char sc = fgetc(ifp);
            switch (sc)
            {
            case '/':
                fputc('/', ofp);
                status = CPPSTATUS;
                break;
            case '*':
                fputc('/', ofp);
                status = CSTATUS;
                break;
            case EOF:
                status = EOFSTATUS;
            default:
                fputc(sc,ofp);
                status = NORSTATUS;
                break;
            }
    }
        break;
    case EOF:
        fputc(fc,ofp);
        status = EOFSTATUS;
        break;
    default:
        fputc(fc, ofp);
        status = NORSTATUS;
        break;
    }

}
//处理c风格注释中的字符
void tra_c(FILE *ifp, FILE *ofp)
{
    char fc = fgetc(ifp);
    switch (fc)
    {
    case '*':
    {
            char sc = fgetc(ifp);
            switch (sc)
            {
            case '/':
                fputc('\n', ofp);
                status = NORSTATUS;
                break;
            case EOF:
                status = EOFSTATUS;
                break;
            default:
                fputc(fc,ofp);
                fputc(sc, ofp);
                status = CSTATUS;
                break;
            }
    }
        break;
    case '\n':
        fputc(fc, ofp);
        fputc('/', ofp);
        fputc('/', ofp);
        status = CSTATUS;
        break;
    case EOF:
        fputc(fc, ofp);
        status = EOFSTATUS;
        break;
    default:
        fputc(fc, ofp);
        status = CSTATUS;
        break;
    }
}
//处理c++风格注释中的字符
void tra_cpp(FILE *ifp, FILE *ofp)
{
    char fc = fgetc(ifp);
    switch (fc)
    {
    case '\n':
        fputc(fc, ofp);
        status = NORSTATUS;
        break;
    case EOF:
        fputc(fc, ofp);
        status = EOFSTATUS;
        break;
    default:
        fputc(fc, ofp);
        status = CPPSTATUS;
        break;
    }

}
//处理EOF
void tra_eof(FILE *ifp, FILE *ofp)
{
    return;
}
//转换函数
void transform(FILE *ifp,FILE *ofp)
{
    while (status != EOFSTATUS)
    {
        switch (status)
        {
        case NORSTATUS:
            tra_nor(ifp, ofp);
            break;
        case CSTATUS:
            tra_c(ifp, ofp);
            break;
        case CPPSTATUS:
            tra_cpp(ifp, ofp);
            break;
        case EOFSTATUS:
            tra_eof(ifp, ofp);
            break;
        default:
            break;
        }
    }
}
//注释转换函数
void comment_transform_main()
{
    FILE * ifp = fopen(MY_INPUT,"r");
    FILE * ofp = fopen(MY_OUTPUT, "w");
    assert(ifp);
    assert(ofp);

    transform(ifp, ofp);

    fclose(ifp);
    fclose(ofp);
}

test.c

#include <stdio.h>
#include"transform.h"
#include<windows.h>

int main()
{
    comment_transform_main();
    printf("Complete transformation!\n\n");

    system("pause");
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值