Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 15.12.2020
Сообщений: 2
1

Удаление комментариев в файле с программой на си

16.12.2020, 15:51. Просмотров 1568. Ответов 0
Метки нет (Все метки)

Здравствуйте. Столкнулся с проблемой, когда уже не приходит в голову, как решить проблему. Проблема заключается в следующем. У меня имеется программа, но во время последней сдачи прошла лишь 70 тестов из 74. Никак не могу понять, какие случаи не учтены. Помогите, пожалуйста, доработать программу. Можно просто предложить способы проверки кода. Потому что перебрал множество случаем, вроде всегда работает...


Само задание:
Кликните здесь для просмотра всего текста

Есть исходные тексты некоторого проекта на языке Си. Необходимо удалить из файлов все комментарии.

Имена исходных файлов сохранены в файле project.txt. На первой строке файла указано целое число N - количество файлов проекта. Далее в файле следует N строк - имена исходных файлов на языке Си. Длина имени с расширением не превышает 32 символа. Все файлы имеют расширение ".c". Размер файла исходного кода не превышает 50 кб.

Ваша программа должна считать каждый файл исходного кода, удалить из него комментарии, и сохранить результат в новый файл. Имя файла-результата совпадает с исходным, но имеет другое расширение - ".wc"

Например, если исходный файл project.txt содержит строки:
file1.c
file2.c
то результатом работы вашей программы должны быть файлы file1.wc и file2.wc

Допускается как наличие в месте удаленного комментария нескольких новых пробелов и/или переводов строк так и отсутствие некоторых существующих.
Не допускается удаление данных из константных строк, обозначенных кавычками (двойными и одинарными).
Однострочный комментарий может быть записан в несколько строк: для этого может быть применен символ разреза/склейки строки \ (допустим только в конце строки и может быть только ее последним символом).
Аналогичным образом могут быть разорваны и строковые константы.


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
 
int main() {
    FILE* project, *c, *wc;
    int n, i, j, k = -1, x = 0;
    char a[35], b[36] = { 0 }, s = { 0 }, s1 = { 0 }, s2 = { 0 };
    
    project = fopen("project.txt", "r");
    fscanf(project, "%d", &n);
    
    for (i = 0; i < n; i++) { 
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        fscanf(project, "%s", &a);
        a[strlen(a)] = '\0';
        j = 0;
        do {
            b[j] = a[j];
            j++;
        } while (a[j] != '\0');
        b[strlen(b) + 1] = '\0';
        b[strlen(b)] = 'c';
        b[strlen(b) - 2] = 'w';
 
        c = fopen(a, "r");
        wc = fopen(b, "w");
        s = -1;
        while(!feof(c)) {
            fscanf(c, "%c", &s);
            if (feof(c)) break;
            if (s == '\n') fprintf(wc, "\n");
            
            else if (s == '\'') {
                fprintf(wc, "%c", s);
                fscanf(c, "%c", &s1);
                if (feof(c)) break;
                while (s1 != '\'') {
                    fprintf(wc, "%c", s1);
                    fscanf(c, "%c", &s1);
                    if (s1 == '\n') {
                        break;
                    }
                    if (feof(c)) break;
                }
                fprintf(wc, "%c", s1);
            }
            
            else if (s == '"') { 
                fprintf(wc, "\"");
                fscanf(c, "%c", &s);
                if (feof(c)) break;
                if (s == '\n') k = 1;
                else 
                    
                    while (s != '"' && s != '\n') {
                        if (s == '\\') {
                            fprintf(wc, "%c", s);
                            fscanf(c, "%c", &s1);
                            if (feof(c)) break;
 
                            if (s1 == '\'') {
                                fprintf(wc, "%c", s1);
                            }
                            else if (s1 == '"') {
                                fprintf(wc, "%c", s1);
                            }
                            else if (s1 == '\n') {
                                fprintf(wc, "\n");
                                
                            }
                            else if (s1 != '\n') fprintf(wc, "%c", s1);
                        }
                        if (k == 1) {
                            k = 0;
                            fprintf(wc, "\n");
                            break;
                        }
                        if (s != '\\') fprintf(wc, "%c", s);
                        fscanf(c, "%c", &s);
                        if (feof(c)) break;
                    }
                    if (k == 1) {
                        k = 0;
                    }
                    if (feof(c)) break;
                    fprintf(wc, "%c", s);
                
            }
 
            else if (s == '/') {
                fscanf(c, "%c", &s1);
                if (feof(c)) break;
 
                if (s1 == '/') { 
                    fscanf(c, "%c", &s);
                    while (s != '\n') {
                        fscanf(c, "%c", &s);
                        if (feof(c)) break;
                        if (s == '\\') {
                            fscanf(c, "%c", &s1);
                            if (feof(c)) break;
                            if (s1 == '\n') {
                                fprintf(wc, "\n");
                            }
                        }
                        
                    }
                    fprintf(wc, "\n");
                }
                else if (s1 == '*') {
                    s1 = '0';
                    fscanf(c, "%c", &s);
                    if (feof(c)) break;
 
                    if (s == '\n') fprintf(wc, "\n");
                        while ((s1 != '*' || s != '/')) {
                            s1 = s;
                            fscanf(c, "%c", &s);
                            if (feof(c)) break;
                        }
                    
                }
                else fprintf(wc, "%c%c", s, s1);
            }
            else fprintf(wc, "%c", s);
        } 
        fclose(c);
        fclose(wc);
    }
    fclose(project); }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2020, 15:51
Ответы с готовыми решениями:

Удаление комментариев в файла с программой на си
Здравствуйте. Столкнулся с проблемой, когда уже не приходит в голову, как решить проблему. Проблема...

Удаление комментариев в файле
Подскажите как можно реализовать удаление комментариев в исходном файле программы на С\С++. Я так...

Удаление комментариев из текста в файле
Нужно удалить из текста все комментарии по типу /*комментарий*/, используя при этом оператор switch...

Удаление комментариев в файле (файл - код програмы на с++ записанв блокноте)
Есть файл(.txt) в котором заисан код проги с комментариями . Как удалить с файла все комментарии ?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2020, 15:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удаление комментариев
Всем привет ) Нужна Ваша помощь! Дан код на паскале в мемо, нужно при нажатии удалить коментарии с...

Удаление комментариев
Помогите реализовать простую программу: 1. Загружается файл 1.txt; 2. Находятся и удаляются все...

Удаление комментариев
Имеется задача по удалению комментариев из файла и есть решение но оно не отрабатывает...

Удаление комментариев
Здравствуйте! Пишу программу для удаления комментариев из программ. Вот кусочек кода. Проблема...

Удаление комментариев
необходимо написать программу для удаления комментариев в коде из исходного файла с разрешением...

Удаление комментариев из файла
есть набросок функции, которая удаляет из файла все комментарии(с поддержкой многострочности.)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.