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, write);

fputc(‘/‘, write);

state = C_STATE;

}

else if (second == ‘/‘)

{

fputc(first, write);

fputc(second, write);

state = CPP_STATE;

}

else

{

fputc(first, write);

fputc(second, write);

}

break;

case EOF:

fputc(first,write);

state = END_STATE;

default:

fputc(first, write);

break;

}

}

void DoCState(FILE *read, FILE *write)

{

int first = fgetc(read);

int second = 0;

switch (first)

{

case ‘*‘:

second = fgetc(read);

if (second == ‘/‘)  //舍弃*/

{

int third = 0;

third = fgetc(read);

if (third != ‘\n‘&&third != EOF)

{

fseek(read, -1, SEEK_CUR);

fputc(‘\n‘, write);

}

else

{

fputc(‘\n‘, write);

}

state = NULL_STATE;

}

else if (second == ‘*‘)

{

ungetc(second, read);

fputc(first, write);

}

else

{

fputc(first, write);

fputc(second, write);

}

break;

case ‘\n‘:

fputc(first, write);

fputc(‘/‘, write);

fputc(‘/‘, write);

break;

case EOF:

fputc(first,write);

state = END_STATE;

break;

default:

fputc(first, write);

break;

}

}

void DoCppState(FILE *read, FILE *write)

{

int first = fgetc(read);

int second = 0;

switch (first)

{

case ‘\n‘:

fputc(first, write);

state = NULL_STATE;

break;

case EOF:

state = END_STATE;

break;

default:

fputc(first, write);

break;

}

}

void ConvertWork(FILE *read, FILE *write)

{

state = NULL_STATE;

while (state != END_STATE)

{

switch (state)

{

case NULL_STATE:

DoNullState(read, write);

break;

case C_STATE:

DoCState(read, write);

break;

case CPP_STATE:

DoCppState(read, write);

break;

}

}

}

void  CommentConvert()

{

FILE* pWrite = NULL;

FILE* pRead = fopen(INPUTFILENAME, "r");

if(pRead == NULL)

{

perror("open file for read");

exit(EXIT_FAILURE);

}

pWrite = fopen(OUTPUTFILENAME, "w");

if (pWrite == NULL)

{

fclose(pRead);

perror("open file for write");

exit(EXIT_FAILURE);

}

ConvertWork(pRead,pWrite);   //转换函数

fclose(pRead);

fclose(pWrite);

}

input.c

output.c

利用状态机把此问题中涉及的分为3个状态,即C状态,C++状态,NULL状态,当遍历到某一个\n,/*,//时,要分情况这三个状态之间转换

时间: 2024-10-13 11:08:27

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语言】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_W

注释转换??——C++注释转换为标准C语言注释

编写注释转化程序,实现对一个C/C++语言程序源文件中注释的转换功能 1.C++风格的注释//注释转换为标准C分风格/* */注释 2./* */风格的注释保持原样 3.所有的转换需要符合语法规则 4.注释转换需要支持注释嵌套 注释转化要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子. 1.单行注释或没有嵌套,注释行直接转换,如: ①//123 /* 123 */ ②/* 123 / / 123 */ 不变 ③/*123 */ 保持原

【C语言】注释转换 ——C注释转换为标准C++语言注释

一.具体要求: 1:C风格的注释/* */注释转换为标准C++风格//注释 2://   风格的注释保持原样 3:所有的转换需要符合语法规则 4:注释转换需要支持注释嵌套 二.转换要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子.                                                          三.注意事项: 1.除以下两种情况的修改,源文件转换后不能有任何其它的修改: a.多余的注释

注释转换(C++到C)

在注释转换的学习中,仍有很多不足,希望大家可以批评改正,谢谢~ 满足条件: 1.C++风格的注释//注释转换为标准C分风格/* */注释 2./*  */风格的注释保持原样 3.所有的转换需要符合语法规则 4.注释转换需要支持注释嵌套 注释转换要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子. 1.单行注释或没有嵌套,注释行直接转换,如: ①//123                             /* 123 */ ②/*

c语言项目—注释转换(c——c++)

题目要求: 要将全部的c语言风格的注释转换为c++风格的注释,如下图所示,需要将input.c文件经过注释转换程序转换为output.c文件所示. 这是测试结果: 首先我们来分析一下这个题目,在做这个项目时,我们需要引进有限状态机这个概念.那我们先来了解一下什么是有限状态机. 有限状态机FSM是软件上一种常用的处理方法,他把复杂的控制逻辑分成有限个稳定状态,在每个状态上进行处理. 我们来画一下状态图: 所以我们把这个项目分成这几个状态. NUL_STATE, C_STATE,  CPP_STAT

【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.

C语言小项目—注释转换

本次这个小项目的目的是把.c文件中的C风格的注释转换成为C++风格的注释. C注释风格:/**/ C++注释风格:// 首先我们分析一下会出现的几种状态,以及各种状态之间的转换关系: 首先我们在这里对一些状态进行了标注,我们这里已知的有4种状态, 第一种是END_STATE 第二种是C_STATE 第三种是CPP_STATE 第四种是我们平时的NULL_state. 在这里,注释转换操作的是文件,所以接下来我么采用文件操作. 首先我们要打开input.c文件,对这个文件内部的文件进行读取,然后处

注释转换项目

注意事项: (1)中英文状态下 (2)在c语言中变量的声明要放在函数开头的最前边 (3)对于代码比较长的工程应该写完一小部分然后测试,这样可以提高效率,不要等到把所有的代码都写完以后在测试这种方法不可取. (4)第二次打开失败,在这种状况下可能第一次打开文件时成功也有可能是失败.为了避免错误,在第二次打开文件之前应该关闭第一次打开的文件 . (5)如果文件存在,但依旧打开失败,借助errno可以看到具体的错误是什么(在工具窗口输入具体的错误码,即可知道错误原因) 例如:当前我写的程序错误码为2,