• 如何删除C/C++源代码中的注释


    具体代码:

    #include <stdlib.h> 
    #include <stdio.h> 


    //删除注释 
    void commentFilter(FILE* sourceFile,FILE* objectFile) 

    char ch; 
    int flag=1; 
    bool read = true; //是否可读取,默认为可以 

    fseek(sourceFile,0,SEEK_END); //定位 

    int len = (int)ftell(sourceFile); //获得文件总字符长度 

    //逐个读取文件中的字符 
    for(int cursor=0;cursor<len;cursor++) 

    fseek(sourceFile,cursor,SEEK_SET); 
    ch = getc(sourceFile); 


    switch(ch) 

    //如果遇到双引号,则先将双引号之间的字符写入目标文件 
    case '"': 

    if(read) //不是在注释行之内 

    putc(ch,objectFile);//写入目标文件 
    putchar(ch); //输出到控制台 

    ++cursor; 
    fseek(sourceFile,cursor,SEEK_SET); 
    char c = getc(sourceFile); 

    for(;c != '"';) 

    putc(c,objectFile); 
    putchar(c); 

    cursor++; 
    fseek(sourceFile,cursor,SEEK_SET); 
    c = getc(sourceFile); 

    break; 

    else 
    break; 


    case '/' : 

    if(read) 

    ++cursor; 
    fseek(sourceFile,cursor,SEEK_SET); //定位到下一个字符,判断是否依然为'/'或'*' 
    char c = getc(sourceFile); 

    if(c == '/'){read=false;flag=1;break;}//flag=1,表示遇到的是以//开头的注释 
    if(c == '*'){read=false;flag=2;break;}//flag=2,表示遇到的是以/*开头的注释 
    else {--cursor;break;} 

    else 
    break; 


    case '*' : 

    if(!read) //之前是注释行 

    ++cursor; 
    fseek(sourceFile,cursor,SEEK_SET); 
    char c = getc(sourceFile); 

    if(c == '/' && flag == 2)//下一个是'/'且为第二种注释 

    ++cursor; 
    fseek(sourceFile,cursor,SEEK_SET); 
    ch = getc(sourceFile); 
    read = true; 

    else 
    {--cursor;break;} 

    else 
    break; 



    case ' ' : 

    if(!read && flag!=2) 
    read = true; 

    //判断下一行是否为空行,如果是则直接忽略 
    ++cursor; 
    fseek(sourceFile,cursor,SEEK_SET); 
    char c = getc(sourceFile); 

    if(c != ' ') //不是则将cursor还原 
    --cursor; 
    break; 

    default: 
    break; 


    if(read) //将读取到的字符写入目标文件及输出到控制台 

    putchar(ch); 
    putc(ch,objectFile); 






    int main() 

    FILE* sourceFile,* objectFile;//源文件,目标文件 

    char sourceName[20],objectName[20];//源文件名,目标文件名 

    gets(sourceName); 
    gets(objectName); 

    sourceFile = fopen(sourceName,"r"); 
    objectFile = fopen(objectName,"w"); 

    commentFilter(sourceFile,objectFile); 

    return 0; 



     
  • 相关阅读:
    Redis计数信号量
    一台服务器能支撑多少个TCP连接
    Python常见字符编码间的转换
    浅谈HttpDNS
    用Python写的一个MySQL数据库监测系统
    用Python写的一个MySQL数据库监测系统
    how tomcat works(第九章)
    how tomcat works(第八章)
    how tomcat works(第八章)
    how tomcat works(第九章)
  • 原文地址:https://www.cnblogs.com/hisheng/p/6134979.html
Copyright © 2020-2023  润新知