#define _CRT_SECURE_NO_WARNINGS

#include <ctype.h>
#include <stdio.h>


void strip(FILE * i, FILE * o)
{
	char lin[513];

	while (fgets(lin, 512, i) != NULL)
	{
		char instring = '\0';
		char wasspace = 0;

		char* c = lin;
		for(; isspace(*c); c++);  // salta spazi iniziali

		for (; *c; c++)
		{
			if (*c == '/' && *(c+1) == '/') 
      {
        fputc('\n', o);
        break;
      }

			if (*c == '#')
			{
				fputc(*c, o);
				while (isspace(*(++c))); 
			}
			if (*c == '"' || *c == '\'')
			{
				if (instring == *c) 
          instring = '\0';
				else
        {
				  if (instring == '\0') 
            instring = *c;
        }
			}

			if (isspace(*c))
			{
				if (!instring)
				{
					if (wasspace && *c != '\n') 
            continue;
					wasspace = 1;
				}
			} 
      else 
        wasspace = 0;

			fputc(*c, o);
		}
	}
}


int main(int argc, char ** argv)
{
//	cerr << "Strip 1.2 - White spaces filter by Guy 2012" << endl;
	FILE* i = argc > 1 ? fopen(argv[1], "r") : stdin;
	FILE* o = argc > 2 ? fopen(argv[2], "w") : stdout;
	if (i && o)
  {
	  strip(i, o);
    fclose(o);
    fclose(i);
  }
	return 0;
}