C/C++注释转换
●项目链接:https://github.com/AHAOAHA/Code/tree/master/Comment_Convert
●将txt文件里的c语言注释方式(/…)转换成为c++注释方式(//…)。
将准备好的txt文件放在项目文件夹里。
CommentConvert.h
#ifndef __COMMENT_CONVERT__
#define __COMMENT_CONVERT__
#include<stdio.h>
#include<stdlib.h>
enum STATE
{
NO_STATE,
C_STATE,
CPP_STATE,
END_STATE
};
void CommentConvert(FILE* pfIn, FILE* pfOut);
void CComment(FILE *pfIn, FILE *pfout, enum STATE *ps);
void CppComment(FILE *pfIn, FILE *pfout, enum STATE *ps);
void NoComment(FILE *pfIn, FILE *pfout, enum STATE *ps);
#endif//__COMMENT_CONVERT__
CommentConvert.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"CommentConvert.h"
void CommentConvert(FILE* pfIn, FILE* pfOut)
{
enum STATE state = NO_STATE;//默认为正常模式
while (state != EOF)
{
switch (state)
{
case NO_STATE:NoComment(pfIn, pfOut, &state);
break;
case CPP_STATE:CppComment(pfIn, pfOut, &state);
break;
case C_STATE:CComment(pfIn, pfOut, &state);
break;
default:NoComment(pfIn, pfOut, &state);
break;
}
}
}
void NoComment(FILE *pfIn, FILE *pfOut, enum STATE *ps)
{
int first = fgetc(pfIn);
if (first != EOF)
{
while (first != '/' && first != EOF)
{
fputc(first, pfOut);
first = fgetc(pfIn);
}
if (first != EOF)
{
int second = fgetc(pfIn);
if (second != EOF)
{
switch (second)
{
case '/':fputc(first, pfOut);
fputc(second, pfOut);
*ps = CPP_STATE;
break;
case '*':fputc(first, pfOut);
fputc(first, pfOut);
*ps = C_STATE;
break;
default:fputc(first, pfOut);
fputc('/', pfOut);
*ps = NO_STATE;
break;
}
}
}
else
{
*ps = EOF;
}
}
else
{
*ps = EOF;
}
}
void CComment(FILE *pfIn, FILE *pfOut, enum STATE *ps)
{
int second = 0;
int first = 0;
flag:
if (second != '*')
{
first = fgetc(pfIn);
}
else
{
first = second;
}
if (first != EOF)
{
while (first != '*')
{
if (first != '\n')
{
fputc(first, pfOut);
}
else
{
fputc(first, pfOut);
fputc('/', pfOut);
fputc('/', pfOut);
}
first = fgetc(pfIn);
}
second = fgetc(pfIn);
if (second != EOF)
{
switch (second)
{
case '/':
*ps = NO_STATE;
break;
default:
fputc(second, pfOut);
goto flag;
break;
}
}
else
{
*ps = EOF;
}
}
else
{
*ps = EOF;
}
}
void CppComment(FILE *pfIn, FILE *pfOut, enum STATE *ps)
{
int first = 0;
first = fgetc(pfIn);
if (first != EOF)
{
while (first != '\n' && first != EOF)
{
fputc(first, pfOut);
first = fgetc(pfIn);
}
if (first == '\n')
{
fputc(first, pfOut);
*ps = NO_STATE;
}
else if (first == EOF)
{
*ps = EOF;
}
}
}
test.c
#include"CommentConvert.h"
int main()
{
FILE* pfIn = fopen("CodeIn.txt", "r");
if (NULL == pfIn)
{
perror("open CodeIn.txt for read");
exit(EXIT_FAILURE);
}
FILE* pfOut = fopen("CodeOut.txt", "w");
{
if (NULL == pfOut)
{
perror("open CodeOut.txt for write");
pfIn = NULL;
exit(EXIT_FAILURE);
}
}
CommentConvert(pfIn, pfOut);
printf("文件已经转换完成\n");
fclose(pfIn);
fclose(pfOut);
//exit(EXIT_SUCCESS);
system("pause");
return 0;
}
程序执行前:
程序执行后: