Из символьного файла создать новый файл, не содержащий комментарии - C (СИ)
Формулировка задачи:
из символьного файла на языке Си создать новый файл не содержащий комментарии. Имена исходного и результирующего файла указать в командной строке(простую програмку)
Решение задачи: «Из символьного файла создать новый файл, не содержащий комментарии»
textual
Листинг программы
/*
* File: main.cpp
* Author: Attenti_ON
*
* Created on 31 Март 2011 г., 16:01
*/
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
#include <stdlib.h>
using namespace std;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
char * del(char * start)
{
size_t len;
char * res = new char [len];
char * result_pos;
result_pos = res;
char *r = start;
int k = 0;
for( r = start; *r != '\0';)
{
while (*r)
{
if (*r != '/')
{
//---пробелы--------------------------------
if (*r == ' ')
{
r++;//смотрим следующий символ
if (*r == ' ')
while (*r == ' ') {r++;}
r--;
}
//------------------------------------------
//--------отступы---------------------------
if (*r == '\n')
{
*result_pos = *r;
r++;
if (*r == '\n')
{
while (*r == '\n') r++;
}
r--;
result_pos++;
r++;
}
else
{
*result_pos = *r;
r++; result_pos++;
}
}
//-------------------------------------------
//------строки----"//home//dakotta//....."---
if (*r == '"')
{
*result_pos = *r;
r++; result_pos++;
while (*r != '"')
{
*result_pos = *r;
r++; result_pos++;
}
}
//--------------------------------------------
//---если встречаем символ '/'----------------
if(*(r) == '/' )
{
r++;
if ((*r != '*') && (*r != '/'))//записываем все подряд
{
r--;
*result_pos = *r;
r++; result_pos++;
}
r--;
r++;
if (*r == '/')//встретили коммент вида //
{
while (*r != '\n') {r++;}
}
r--;
r++;
if (*r == '*')
{ //удаление /* */
r++;
while (*r != '*')
{r++; k++;}
r++;
if (*r != '/')//ищем завершение комментария */
{
r = r -k-2;
*result_pos = '\0';
break;
}
if (*r == '/')//нашли, перешагнули
r++;
}
}
}
break;
}
return res;
}
int main(int argc, char* argv[])
{
size_t len;
char *str = new char [len];
FILE* fp = fopen("//home//dakotta//Документы//file1.txt","r");
if (fp)
{
int i=0;
char ch;
while((ch = getc(fp)) != EOF)
str[i++]=ch;
str[i] = '\0';
cout << str;
}
else printf("Невозможно открыть файл на чтение.\n");
fclose(fp);
char *res = del(str);
cout << endl << endl << "без комментов" << endl << res << endl;
return 0;
}