C/C++注释转换

C/C++注释转换

●将txt文件里的c语言注释方式(/)转换成为c++注释方式(//…)。
将准备好的txt文件放在项目文件夹里。

CommentConvert.h

#ifndef __COMMENT_CONVERT__
#define __COMMENT_CONVERT__
#include<stdio.h>
#include<stdlib.h>
enum STATE
{
    NO_STATE,
    C_STATE,
    CPP_STATE,
    END_STATE
};
void CommentConvert(FILE* pfIn, FILE* pfOut);
void CComment(FILE *pfIn, FILE *pfout, enum STATE *ps);
void CppComment(FILE *pfIn, FILE *pfout, enum STATE *ps);
void NoComment(FILE *pfIn, FILE *pfout, enum STATE *ps);
#endif//__COMMENT_CONVERT__

CommentConvert.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"CommentConvert.h"
void CommentConvert(FILE* pfIn, FILE* pfOut)
{
    enum STATE state = NO_STATE;//默认为正常模式
    while (state != EOF)
    {
        switch (state)
        {
        case NO_STATE:NoComment(pfIn, pfOut, &state);
            break;
        case CPP_STATE:CppComment(pfIn, pfOut, &state);
            break;
        case C_STATE:CComment(pfIn, pfOut, &state);
            break;
        default:NoComment(pfIn, pfOut, &state);
            break;
        }
    }
}
void NoComment(FILE *pfIn, FILE *pfOut, enum STATE *ps)
{
    int first = fgetc(pfIn);
    if (first != EOF)
    {
        while (first != '/' && first != EOF)
        {
            fputc(first, pfOut);
            first = fgetc(pfIn);
        }
        if (first != EOF)
        {
            int second = fgetc(pfIn);
            if (second != EOF)
            {
                switch (second)
                {
                case '/':fputc(first, pfOut);
                    fputc(second, pfOut);
                    *ps = CPP_STATE;
                    break;
                case '*':fputc(first, pfOut);
                    fputc(first, pfOut);
                    *ps = C_STATE;
                    break;
                default:fputc(first, pfOut);
                    fputc('/', pfOut);
                    *ps = NO_STATE;
                    break;
                }
            }
        }
        else
        {
            *ps = EOF;
        }
    }
    else
    {
        *ps = EOF;
    }
}
void CComment(FILE *pfIn, FILE *pfOut, enum STATE *ps)
{
    int second = 0;
    int first = 0;
flag:
    if (second != '*')
    {
        first = fgetc(pfIn);
    }
    else
    {
        first = second;
    }
    if (first != EOF)
    {
        while (first != '*')
        {
            if (first != '\n')
            {
                fputc(first, pfOut);
            }
            else
            {
                fputc(first, pfOut);
                fputc('/', pfOut);
                fputc('/', pfOut);
            }
            first = fgetc(pfIn);

        }
        second = fgetc(pfIn);
        if (second != EOF)
        {
            switch (second)
            {
            case '/':
                *ps = NO_STATE;
                break;
            default:
                fputc(second, pfOut);
                goto flag;
                break;
            }
        }
        else
        {
            *ps = EOF;
        }
    }
    else
    {
        *ps = EOF;
    }
}
void CppComment(FILE *pfIn, FILE *pfOut, enum STATE *ps)
{
    int first = 0;
    first = fgetc(pfIn);
    if (first != EOF)
    {
        while (first != '\n' && first != EOF)
        {
            fputc(first, pfOut);
            first = fgetc(pfIn);
        }
        if (first == '\n')
        {
            fputc(first, pfOut);
            *ps = NO_STATE;
        }
        else if (first == EOF)
        {
            *ps = EOF;
        }
    }
}

test.c

#include"CommentConvert.h"
int main()
{
    FILE* pfIn = fopen("CodeIn.txt", "r");
    if (NULL == pfIn)
    {
        perror("open CodeIn.txt for read");
        exit(EXIT_FAILURE);
    }
    FILE* pfOut = fopen("CodeOut.txt", "w");
    {
        if (NULL == pfOut)
        {
            perror("open CodeOut.txt for write");
            pfIn = NULL;
            exit(EXIT_FAILURE);

        }
    }
    CommentConvert(pfIn, pfOut);
    printf("文件已经转换完成\n");
    fclose(pfIn);
    fclose(pfOut);
    //exit(EXIT_SUCCESS);
    system("pause");
    return 0;
}

程序执行前:
这里写图片描述
程序执行后:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/h___q/article/details/79690970