博客
关于我
注释转换
阅读量:774 次
发布时间:2019-03-24

本文共 2993 字,大约阅读时间需要 9 分钟。

输入程序的目标是将源文件中C风格的注释转换为C++风格的注释,并将结果保存到另一个文件中。通过对原有注释的识别和处理,程序能够按照目标语言的注释风格进行转换。

示例代码解析

#include 
#pragma warning(disable:4996)typedef enum Condition { NOT_ANNOTATION, MAYBE_IN_ANNOTATION, C_ANNOTATION, CPP_ANNOTATION, MAYBE_OUT_ANNOTATION} Condition;int main() { FILE *pIn = fopen("input.c", "rt"); if (pIn == NULL) { perror("fopen test"); return 1; } FILE *pOut = fopen("output.c", "wt"); if (pOut == NULL) { fclose(pIn); perror("fopen out"); return 1; } char ch; Condition state = NOT_ANNOTATION; do { ch = fgetc(pIn); switch (state) { case NOT_ANNOTATION: if (ch == '/') { state = MAYBE_IN_ANNOTATION; fputc(ch, pOut); } else { state = NOT_ANNOTATION; fputc(ch, pOut); } break; case MAYBE_IN_ANNOTATION: if (ch == '/') { state = CPP_ANNOTATION; fputc(ch, pOut); } else if (ch == '*') { state = C_ANNOTATION; fputc('/', pOut); } else { state = NOT_ANNOTATION; fputc(ch, pOut); } break; case CPP_ANNOTATION: if (ch == '\n') { state = NOT_ANNOTATION; fputc(ch, pOut); } else { fputc(ch, pOut); } break; case C_ANNOTATION: if (ch == '*') { state = MAYBE_OUT_ANNOTATION; } else { fputc(ch, pOut); if (ch == '\n') { fprintf(pOut, "//"); } } break; case MAYBE_OUT_ANNOTATION: if (ch == '*') { fputc('*', pOut); state = MAYBE_OUT_ANNOTATION; } else if (ch == '/') { char nextch = fgetc(pIn); if (nextch != '\n') { fputc('\n', pOut); } ungetc(nextch, pIn); state = NOT_ANNOTATION; } else { fputc('*', pOut); fputc(ch, pOut); state = C_ANNOTATION; } break; } } while (ch != EOF); fclose(pOut); fclose(pIn); return 0;}

转换逻辑说明

  • 状态枚举:定义了五种状态,分别为未注释(NOT_ANNOTATION)、可能进入注释(MAYBE_IN_ANNOTATION)、C风格注释(C_ANNOTATION)、C++风格注释(CPP_ANNOTATION)以及可能出注释(MAYBE_OUT_ANNOTATION)。

  • 读取和处理字符

    • 当当前状态为NOT_ANNOTATION时,若字符为/,则可能进入注释模式;否则保持非注释状态。
    • MAYBE_IN_ANNOTATION状态下,遇到/转为C++注释模式,遇到*转为C风格注释模式。
    • C++注释模式按\n转换回非注释状态。
    • C风格注释模式遇到*进入可能出注释状态,正常字符则输出*并显示字符。
    • 在可能出注释状态下,遇到/则检查下一个字符是否为\n,决定是否插入换行符。
  • 输出处理

    • 每种状态下都会输出当前字符或执行相应的注释转换操作。
  • 该程序逻辑清晰,能够准确识别和转换不同注释类型,同时兼容C和C++的注释风格。

    转载地址:http://oblkk.baihongyu.com/

    你可能感兴趣的文章
    opencv图像切割1-KMeans方法
    查看>>
    OpenCV图像处理篇之阈值操作函数
    查看>>
    OpenCV学习(13) 细化算法(1)(转)
    查看>>
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    查看>>
    OpenCV学堂 | OpenCV案例 | 基于轮廓分析对象提取
    查看>>
    OpenCV官方文档 理解k - means聚类
    查看>>
    OpenCV探索
    查看>>
    openCV目标识别 目标跟踪 YOLO5深度学习 Python 计算机视觉 计算机毕业设计 源码下载
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
    查看>>
    OpenCV计算点到直线的距离 数学法
    查看>>
    Opencv识别图中人脸
    查看>>
    opencv面向对象设计初探
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    OpenFeign源码学习
    查看>>
    OpenFeign组件声明式服务调用
    查看>>