转换原理图解:
基于上图原理,可以写出代码:
//主函数:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "标头.h"
int main()
{
convert();
system("pause");
return 0;
}
//具体实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "标头.h"
void convert()
{
FILE *fop = fopen("c注释.c", "r");
FILE *fop1 = fopen("C++注释.cpp", "w");
if (fop == NULL||fop1==NULL)
perror("The following error occurred");
else
{
ele = Null_case;
while (ele != eof_case)
{
int ch=getc(fop);
switch (ele)
{
case C_case:
do_c(ch,fop,fop1);
break;
case Cpp_case:
do_cpp(ch, fop, fop1);
break;
case Null_case:
do_Null(ch, fop, fop1);
break;
case eof_case:
ele = eof_case;
break;
default:
break;
}
}
}
fclose(fop);
fclose(fop1);
return 0;
}
void do_Null(int ch, FILE* fop, FILE *fop1)
{
switch (ch)
{
case '/':
{
int ch = getc(fop);
switch (ch)
{
case'/':
{
putc('/', fop1);
putc('/', fop1);
ele = Cpp_case;
break;
}
case '*':
{
putc('/', fop1);
putc('/', fop1);
ele = C_case;
break;
}
case EOF:
{
putc('/', fop1);
ele = eof_case;
break;
}
default:
{
putc('/', fop1);
ch = ungetc(ch, fop);
ele = Null_case;
break;
}
}
break;
}
case EOF:
ele = eof_case;
break;
default:
putc(ch, fop1);
break;
}
return;
}
void do_c(int ch, FILE* fop, FILE *fop1)
{
switch (ch)
{
case '*':
{
int ch = getc(fop);
switch (ch)
{
case '/':
{
ele = Null_case;
break;
}
case EOF:
ele = eof_case;
break;
default:
{
putc('*', fop1);
ch = ungetc(ch, fop);
ele = C_case;
break;
}
}
break;
}
case '\n':
{
putc(ch, fop1);
putc('/', fop1);
putc('/', fop1);
ele = C_case;
break;
}
case EOF:
ele = eof_case;
break;
default:
putc(ch, fop1);
break;
}
return;
}
void do_cpp(int ch, FILE* fop, FILE *fop1)
{
switch (ch)
{
case'\n':
{
putc(ch, fop1);
ele = Null_case;
break;
}
case EOF:
ele = eof_case;
break;
default:
putc(ch, fop1);
break;
}
return;
}
//头文件
#pragma once
#include<windows.h>
enum
{
C_case,
Cpp_case,
Null_case,
eof_case
}ele;
void convert();
void do_c(int ch, FILE* fop, FILE *fop1);
void do_cpp(int ch, FILE* fop, FILE *fop1);
void do_Null(int ch, FILE* fop, FILE *fop1);
测试结果: