C编程语言练习1-23

时间:2014-02-24 07:05:46

标签: c

好的我还有另一个问题,我们应该把这个程序.C文件并删除它的所有注释,我有点工作,但程序似乎在删除第一个注释后卡住了。删除第一条评论后,它会停止在其后保存,我无法找出原因。

确切的书籍问题:编写程序以删除C程序中的所有注释。不要忘记正确处理带引号的字符串和字符常量。

我只编写了这个程序来删除/ * * /注释,如果我得到了它的工作,那就改变它以便能够做//注释。

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

#define MAX_BUFFER   5000
#define SPACE        ' '
#define TAB          '\t'
#define IN            1
#define OUT           0
/* ********************************************************************** */    
int main()
{   
    char arrayPrimary[MAX_BUFFER];
    char arraySecondary[MAX_BUFFER];
    int i, c, j, size, string;
    for(i = 0;(c = getchar()) != EOF && c != '\0'; i++)
    {
        arrayPrimary[i] = c;
    }
    arrayPrimary[i] = '\0';
    size = i;
    string = OUT;
/* ********************************************************************** */    
    for(i = 0, j = 0; i < size; i++, j++)
    {

        if((arrayPrimary[i] == '/' && arrayPrimary[i + 1] == '*'))
        {
            printf("IN\n");
            string = IN;
        }
        else if(string == OUT)
        {
            arraySecondary[j] = arrayPrimary[i];
        }

        else if(string == IN && arrayPrimary[i] == '*' && arrayPrimary[i + 1] == '/')
        {
            printf("OUT\n");
            i++;
            string = OUT;
        }
    }   
    arraySecondary[j] = '\0';
    printf("%s", arraySecondary);
    return 0;
}

如果我输入此代码文件,我会得到。

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

#define MAX_BUFFER   5000
#define SPACE        ' '
#define TAB          '\t'
#define IN            1
#define OUT           0

1 个答案:

答案 0 :(得分:1)

当您处于评论区域时,您应该停止增加j或填写非'\0'的内容,因为j会继续。否则,由于未初始化'\0',缓冲区可能会被随机arraySecondary停止。

我的实现将从for循环中删除j++,并按如下方式生成out-of-comment-area语句。

    else if(string == OUT)
    {
        arraySecondary[j++] = arrayPrimary[i];
    }