Из символьного файла создать новый файл, не содержащий комментарии - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д