将C语言注释转换为C++注释
代码思路:
CommentConvert.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __COMMENTCONVERT_H__
#define __COMMENTCONVERT_H__
#include<stdio.h>
#include<stdlib.h>
enum STATE
{
NUL_STATE,
C_STATE,
CPP_STATE,
END_STATE
};
void CommentConvert();
void DoConvert(FILE *pfIn,FILE *pfOut,enum STATE *psta);
void NulConvert(FILE *pfIn, FILE *pfOut, enum STATE *psta);
void CConvert(FILE *pfIn, FILE *pfOut, enum STATE *psta);
void CppCovert(FILE *pfIn, FILE *pfOut, enum STATE *psta);
#endif
CommentConvert.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "CommentConvert.h"
void CommentConvert()
{
FILE *pfIn = NULL;
FILE *pfOut = NULL;
enum STATE psta = NUL_STATE;
pfIn = fopen("input.c","r");
if (pfIn == NULL)
{
perror("input.c");
exit(EXIT_FAILURE);
}
pfOut = fopen("output.c","w");
if(pfOut == NULL)
{
perror("output");
fclose(pfIn);
exit(EXIT_FAILURE);
}
DoConvert(pfIn,pfOut,&psta);
fclose(pfIn);
fclose(pfOut);
}
void DoConvert(FILE *pfIn,FILE *pfOut,enum STATE *psta)
{
while (*psta != END_STATE)
{
switch (*psta)
{
case C_STATE:
CConvert(pfIn, pfOut, psta);
break;
case CPP_STATE:
CppCovert(pfIn, pfOut, psta);
break;
case NUL_STATE:
NulConvert(pfIn, pfOut, psta);
break;
default:
break;
}
}
printf("转换成功!\n");
}
void NulConvert(FILE *pfIn, FILE *pfOut, enum STATE *psta)
{
int first = 0;
int second = 0;
first = fgetc(pfIn);
switch (first)
{
case '/' :
second = fgetc(pfIn);
switch (second)
{
case '*':
fputc('/',pfOut);
fputc('/', pfOut);
*psta = C_STATE;
break;
case '/':
fputc('/', pfOut);
fputc('/', pfOut);
*psta = CPP_STATE;
break;
default:
ungetc(second,pfIn);
*psta = NUL_STATE;
break;
}
break;
case EOF :
*psta = END_STATE;
break;
default:
fputc(first,pfOut);
*psta = NUL_STATE;
break;
}
}
void CConvert(FILE *pfIn, FILE *pfOut, enum STATE *psta)
{
int first = 0;
int second = 0;
int third = 0;
first = fgetc(pfIn);
switch (first)
{
case '*':
second = fgetc(pfIn);
switch (second)
{
case '/':
third = fgetc(pfIn);
if (third != '\n' && third != EOF)
ungetc(third,pfIn);
fputc('\n', pfOut);
*psta = NUL_STATE;
break;
default:
ungetc(second,pfIn);
fputc(first,pfOut);
*psta = C_STATE;
break;
}
break;
case '\n':
fputc('\n',pfOut);
fputc('/', pfOut);
fputc('/', pfOut);
*psta = C_STATE;
break;
default:
fputc(first,pfOut);
*psta = C_STATE;
break;
}
}
void CppCovert(FILE *pfIn, FILE *pfOut, enum STATE *psta)
{
int first = 0;
first = fgetc(pfIn);
switch (first)
{
case '\n':
fputc(first,pfOut);
*psta = NUL_STATE;
break;
case EOF:
*psta = END_STATE;
break;
default:
fputc(first,pfOut);
*psta = CPP_STATE;
break;
}
}
test.c
#include "CommentConvert.h"
#define _CRT_SECURE_NO_WARNINGS 1
int main()
{
CommentConvert();
return 0;
}
测试结果: