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

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

15.12.2020, 23:31. Просмотров 466. Ответов 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
15.12.2020, 23:31
Ответы с готовыми решениями:

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

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

Удаление комментариев из файла
нужно чтобы программа удаляла все коментарии из файла .c и перезаписывала новый файл уже без...

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

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

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

Поиск и удаление комментариев из файла
Добрый вечер. Язык С++ изучаю недавно, помогите, пожалуйста, написать программу. Задача программы:...

Удаление комментариев из текстового файла
Помогите пожалуйста! нужно написать программу для удаления комментариев из текстового файла.

Удаление комментариев из файла с текстом программы
В чём проблема? Выдаёт ошибку, что входная строка имела неверный формат? нужно удалить из...

Удаление комментариев из файла, содержащего программный код
Здравствуйте. Дан текстовый файл. В нем находится программа, написанная на Паскале по правилам...

Удаление комментариев из файла, содержащего текст Пролог-программы
Здравствуйте. Помогите пожалуйста. - Удаление из файла, содержащего текст Пролог-программы,...

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


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

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

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