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

做此项目的经历主要的收获是熟悉了状态机这一方法的使用,还有就是对每实现一个功能就尽量封装一个函数这一概念把握的更为精到。状态机:关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是
摘要由CSDN通过智能技术生成

做此项目的经历主要的收获是熟悉了状态机这一方法的使用,还有就是对每实现一个功能就尽量封装一个函数这一概念把握的更为精到。

状态机:关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。(百度摘抄)

首先说明:
C语言注释是以斜杠星开始到第一次遇到星斜杠为止的一个字符串
CPP注释是以双斜杠开始,直到遇到回车为止的一个字符串

1、放声明的头文件

#ifndef __COMMENTCONVERT_HEADFILE__     //预编译指令
#define __COMMENTCONVERT_HEADFILE__

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUMBER_OF_CHAR 50

typedef enum Convert_state    //状态机
{
    NULL_STATE,     //无状态,即不做任何处理
    C_STATE,        //C注释状态
    CPP_STATE,      //CPP注释状态
    STRING_STATE,   //字符串状态
    END_STATE       //结束状态
}Con_state;

//void CommentConvert();
//void C_Convert_To_CPP(FILE *fread, FILE* fwrite);
//void CPP_Convert_To_C(FILE *fread, FILE* fwrite);
//void Null_State_of_C_Con_CPP(FILE *fread, FILE* fwrite);
//void C_State_of_C_Con_CPP(FILE *fread, FILE* fwrite);
//void Cpp_State_of_C_Con_CPP(FILE *fread, FILE* fwrite);
//void Null_State_of_CPP_Con_C(FILE *fread, FILE* fwrite);
//void C_State_of_CPP_Con_C(FILE *fread, FILE* fwrite);
//void Cpp_State_of_CPP_Con_C(FILE *fread, FILE* fwrite);
//void String_Convert(FILE *fread, FILE* fwrite);

#endif 

2、实现声明的.c文件

#include "CommentConvert.h"

Con_state state = NULL_STATE;    //声明一个全局的状态机变量

void menu()
{
    printf("*******************************************\n");
    printf("                   注释转换                \n");
    printf("            请选择程序要实现的功能         \n");
    printf("               [1] C----->>CPP             \n");
    printf("               [2] CPP----->>C             \n");
    printf("               [0]    EXIT                 \n");
    printf("*******************************************\n");
    printf("请选择>");
}

void Null_State_of_C_Con_CPP(FILE *fread, FILE* fwrite)
{
    int ch = fgetc(fread);
    switch (ch)     //遇到不同的情况,进入不同的状态
    {
        int next_ch = 0;
    case '/':
        next_ch = fgetc(fread);
        if (next_ch == '*')
        {
            fputc(ch, fwrite);
            fputc('/', fwrite);
            state = C_STATE;
        }
        else if (ch == '/')
        {
            fputc(ch, fwrite);
            fputc(next_ch, fwrite);
            state = CPP_STATE;
        }
        else
        {
            fputc(ch, fwrite);
            fputc(next_ch, fwrite);
        }
        break;
    case '"':
        fputc(ch, fwrite);
        state = STRING_STATE;
        break
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值