程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 將c語言注釋轉換成c++注釋

將c語言注釋轉換成c++注釋

編輯:C++入門知識

將c語言注釋轉換成c++注釋


可以分為7種情況
1.一般情況
/* int i = 0; */
2.換行問題
/* 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.連續注釋問題
////
6.連續的**/問題
/*/
7.C++注釋問題
// /xxxxxxxxxxxx/
轉換之後結果
1.一般情況
// int i = 0;
2.換行問題
// 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.連續注釋問題
//
//
6.連續的**/問題
//*
7.C++注釋問題
// /xxxxxxxxxxxx/

#include
#include
#include
#pragma warning (disable:4996)

typedef enum STATE
{
    SUCCEED,  //轉換成功
    FILE_ERROR, //文件錯誤
    NOT_MATCH,  //注釋不匹配
    OTHERS,     //其他錯誤
}STATE; 
typedef enum TAG
{
    TAG_BEDIN,//在c注釋段內
    TAG_END,  //注釋結束
}TAG;


STATE AnnotationConvert(FILE* InFile, FILE* OutFile)
{
    TAG tag = TAG_END;
    char firstch;
    char secondch;
    assert(InFile);
    assert(OutFile);

    do
    {   firstch = fgetc(InFile);
        switch(firstch)
        {

            case('/'):
                secondch = fgetc(InFile);
                if (secondch == '*'&& tag == TAG_END)
                {
                    fputc('/', OutFile);
                    fputc('/', OutFile);
                    tag = TAG_BEDIN;
                }
                else
                {
                    fputc(firstch, OutFile);
                    fputc(secondch, OutFile);
                    if (secondch == '/')
                    {
                        char nextch;
                       do
                        {   nextch = fgetc(InFile);

                            fputc(nextch, OutFile);
                        } while (nextch != '\n' && nextch != EOF);
                    }
                }   
                break;
            case('\n') :
                fputc(firstch, OutFile);
                if (tag == TAG_BEDIN)
                {

                    fputc('/', OutFile);
                    fputc('/', OutFile);
                }
                break;
            case('*') :
                secondch = fgetc(InFile);
                if (secondch == '/')
                {
                    char nextch = fgetc(InFile);
                    tag = TAG_END;
                    fputc('\n', OutFile);
                    if (nextch == '/')
                    {
                        fseek(InFile, -1, SEEK_CUR);
                    }
                    else if (nextch != '\n')
                    {
                        fputc(nextch, OutFile);
                    }
                }
                else
                {
                    fputc(firstch, OutFile);
                    fseek(InFile, -1, SEEK_CUR);
                }
                break;
            default:
                fputc(firstch, OutFile);
                break;
        }

    } while (firstch != EOF);
    if (tag == TAG_END)
    {
        return SUCCEED;
    }
    else
        return NOT_MATCH;
}
int startconvert()
{
    STATE  s;
    const char* infilename = "input.c";
    const char* outfilename = "output.c";
    FILE* InFile = fopen(infilename, "r");
    FILE* OutFile = fopen(outfilename, "w");
    if (InFile == NULL)
    {
        perror("input.c");
        return FILE_ERROR;
    }
    if (OutFile == NULL)
    {
        fclose(InFile);
        perror("output.c");
        return FILE_ERROR;
    }
    s = AnnotationConvert(InFile, OutFile);
    fclose(InFile);
    fclose(OutFile);
    return s;
}


int main()
{
    STATE ret = startconvert();
    if (ret == SUCCEED)
    {
        printf("轉換成功\n");
    }
    else if (ret == NOT_MATCH)
    {
        printf("注釋不匹配\n");
    }
    else if (ret == FILE_ERROR)
    {
        printf("文件錯誤:%d\n", errno);
    }
    else
    {
        printf("其他錯誤\n");
    }
    getchar();
    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved