C语言里的注释转换问题 (把C语言的的注释转换成C++的注释)



#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<iostream>

enum State
{
 END_STATE,
 NUL_STATE,
 C_STATE,
 CPP_STATE,
};

void DoNulcomment(FILE *pfIn, FILE *pfOut, State*s)
{
 int first = 0;
 first = fgetc(pfIn);
 switch (first)
 {
 case'/':
 {
      int second = 0;
      second = fgetc(pfIn);
      switch (second)
      {
      case'/'://cpp״̬
      {
         fputc(first, pfOut);
         fputc(second, pfOut);
         *s = CPP_STATE;
      }
       break;
      case'*'://c״̬
      {
         fputc(first, pfOut);
         fputc('/', pfOut);
         *s = C_STATE;
      }
       break;
      default:
       fputc(first, pfOut);
       fputc(second, pfOut);
       break;
      }
 }
  break;
 case EOF:
  fputc(first, pfOut);
  *s = END_STATE;
  break;
 default:
  fputc(first, pfOut);
  break;
 }
}
void DoCcomment(FILE *pfIn, FILE *pfOut, State*s)
{
 int first = 0;
 first = fgetc(pfIn);
 switch (first)
 {
 case '*':
 {
    int second = 0;
    second = fgetc(pfIn);
    switch (second)
    {
    case'/':
    {
         int third = fgetc(pfIn);
         if (third == '\n')
         {
          fputc(third, pfOut);
          *s = NUL_STATE;

         }
         else
         {
          fputc('\n', pfOut);
          ungetc(third, pfIn);
          *s = NUL_STATE;
         }
         break;
    }
    case'*':
     ungetc('*', pfIn);
     fputc(first, pfOut);
     break;
    default:
     fputc(first, pfOut);
     fputc(second, pfOut);
     break;
    }
 }
  break;
 case'/':
 {
      int second = 0;
      second = fgetc(pfIn);
      switch (second)
      {
      case'/':
      {
        fputc(first, pfOut);
        fputc(second, pfOut);
        *s = CPP_STATE;
      }
       break;
      default:
       fputc(first, pfOut);
       fputc(second, pfOut);
       break;
      }
 }
  break;
 case '\n':
 {
     int third = fgetc(pfIn);
     fputc(first, pfOut);
     if (third == '*')
     {
      ungetc('*', pfIn);
     }
     else
     {
      fputc('/', pfOut);
      fputc('/', pfOut);
     }
     break;
 }

 default:
  fputc(first, pfOut);
  break;
 }
}
void DoCppcomment(FILE *pfIn, FILE *pfOut, State*s)
{
 int first = 0;
 first = fgetc(pfIn);
 switch (first)
 {
 case'/':
 {
      int second = 0;
      second = fgetc(pfIn);
      switch (second)
      {
      case'/':
       fputc(first, pfOut);
       fputc(second, pfOut);
       *s = CPP_STATE;
       break;
      default:
       fputc(first, pfOut);
       fputc(second, pfOut);
       break;
      }
 }
  break;
 case'*':
 {
      int second = 0;
      second = fgetc(pfIn);
      switch (second)
      {
      case'/':
      {
        fputc(first, pfOut);
        fputc(second, pfOut);
        *s = NUL_STATE;
        break;
      }
      case'*':
      {
        ungetc('*', pfIn);
        fputc(first, pfOut);
        break;
      }
      default:
       fputc(first, pfOut);
       fputc(second, pfOut);
       break;
      }
 }
  break;
 case '\n':
  *s = NUL_STATE;
  fputc(first, pfOut);
  break;
 case EOF:
  *s = END_STATE;
  break;
 default:
  fputc(first, pfOut);
  break;
 }
}

int main()
{
 //创建文件
 FILE *pfOut = NULL;
 FILE *pfIn = NULL;
 pfIn = fopen("input.c", "r");
 if (pfIn == NULL)
 {
  perror("pfin::fopen");
  exit(EXIT_FAILURE);
 }
 pfOut = fopen("output.c", "w");
 if (pfOut == NULL)
 {
  perror("pfout::fopen");
  fclose(pfIn);
  exit(EXIT_FAILURE);
 }
 //开始进行读取和转换
 enum State state = NUL_STATE;
 while (state != END_STATE)
 {
  switch (state)
  {
  case NUL_STATE:
   DoNulcomment(pfIn, pfOut, &state);
   break;
  case C_STATE:
   DoCcomment(pfIn, pfOut, &state);
   break;
  case CPP_STATE:
   DoCppcomment(pfIn, pfOut, &state);
   break;
  }
 }
 //关闭文件
 fclose(pfIn);
 fclose(pfOut);
 system("pause");
 return 0;
}



下面的是input.c文件

// 1.一般情况
int num = 0;
/* 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.连续注释问题
/*a*//*b*/

// 6.连续的**/问题
/***/

// 7.C++注释问题
// /*xxxxxxxxxxxx*/



下面是output.c文件

// 1.一般情况
int num = 0;
// int i = 0;

// 2.换行问题
// int i = 0;
int j = 0;
// int i = 0;
int j = 0;

// 3.匹配问题
//int i = 0;/*xxxxx

// 4.多行注释问题
//
//nt i=0;
//nt j = 0;
//nt k = 0;

int k = 0;

// 5.连续注释问题
//a
//b

// 6.连续的**/问题
//*

// 7.C++注释问题
// /*xxxxxxxxxxxx*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值