Из символьного файла создать новый файл, не содержащий комментарии - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы