C註釋轉換到C++註釋項目

#define _CRT_SECURE_NO_WARNINGS 1ide

#include"CommentConvert.h"函數

StateType state;3d

void  DoNullState(FILE *read, FILE *write)blog

{get

int first = fgetc(read);input

int second = 0;it

switch (first)io

{class

case '/':file

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

wKiom1butHqx-vzkAAAgGFw9bjQ226.png

output.c

wKioL1butRLTofNoAAAdltDJB0s227.png

利用狀態機把此問題中涉及的分爲3個狀態,即C狀態,C++狀態,NULL狀態,當遍歷到某一個\n,/*,//時,要分狀況這三個狀態之間轉換

相關文章
相關標籤/搜索