Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (Си) Линейный список https://www.cyberforum.ru/ c/ thread2753439.html
Построить в динамической памяти линейный связанный список символьного типа данных. Количество элементов списка заранее неизвестно. Список строить в прямом порядке, окончание ввода – введение...
C (Си) вычислительная геометрия
Даны центры равномерно растущих кругов на плоскости. При столкновении друг с другом столкнувшиеся круги прекращают свой рост. Найти радиусы кругов, когда процесс роста остановится полностью. ...
Заполнить произвольную матрицу змейкой C (Си)
Пользователь вводит размерность матрицы(число строк m на число столбцов n).Программа должна заполнить её числами по порядку 1 2 3 4 5 ....как змейка, по часовой стрелке Вот пример, чтоб было ясно 1...
C (Си) двумерный массив Нужно решить эту задачу на си: Дана матрица. Удалите из нее строку и столбец, на пересечении которых расположен минимальный элемент. либо же перевести с паскаля программу: const c=','; var A:... https://www.cyberforum.ru/ c/ thread2752869.html
C (Си) Дан целочисленный массив размера N (> 2). Удалить из массива все элементы с четными номерами (2, 4, . . .) https://www.cyberforum.ru/ c/ thread2752815.html
Дан целочисленный массив размера N (> 2). Удалить из массива все элементы с четными номерами (2, 4, . . .). Условный оператор не использовать
C (Си) Программа для определения конфигурации ПК ( язык C )
Проверка оборудования. Для компьютера на своем рабочем месте определить: - тип компьютера; - конфигурацию оборудования; - объем оперативной памяти; - наличие и объем расширенной памяти; -...
C (Си) Поменять цифры
#include <stdlib.h> #include <stdio.h> int a = 300; int b = 600; int main() { printf("a = %d, b = %d\n", a, b);
C (Си) POSIX Threads API Здравствуйте! Помогите решить задачу многопоточным способом с использованием POSIX Threads API. Задание: Дан целочисленный массив с количеством элементов N. Сформировать новый массив из тех его... https://www.cyberforum.ru/ c/ thread2752086.html
C (Си) Перемещение "камеры" в сторону её направления | OpenGL https://www.cyberforum.ru/ c/ thread2752080.html
Всех приветствую. Я очень очень редко спрашиваю что-либо на форумах, однако сегодня исключение. Я решил чисто позабавится и написать свой клон майна. Вопросы "зачем писать на устаревшем OpenGL...
C (Си) Определить столбец с минимальным значением этой суммы и вывести его номер на экран В квадратной матрице размером К*К, имеющей имя МА содержаться целые числа. К- число строк и столбцов. Ввести элементы матрицы с клавиатуры. Определить и вывести на экран сумму положительных элементов... https://www.cyberforum.ru/ c/ thread2752023.html
C (Си) Цикл for си https://www.cyberforum.ru/ c/ thread2751897.html
Вычислите с использованием цикла for значение для заданного N
C (Си) Написать программу Написать программу на СИ методом градиентного спуска с постоянным шагом. спасибо. https://www.cyberforum.ru/ c/ thread2751658.html
0 / 0 / 0
Регистрация: 15.12.2020
Сообщений: 2
0

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

16.12.2020, 15:51. Просмотров 1581. Ответов 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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.