0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 5
1

Программа удаляющая все комментарии из листинга программы С++

05.10.2011, 14:54. Показов 5487. Ответов 5

Помогите пожалуйста написать программу,удаляющую все комментарии из листинга программы С++.Программа должна обрабатывать файл *.cpp указываемый пользователем в начале работы.
обьяснения каждой строки желательно бы еще...Заплачу если надо..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2011, 14:54
Ответы с готовыми решениями:

Программа удаляющая комментарии из листинга программы С++
помогите пожайлуста , никак не могу разобраться. Создать програму, какая будет удалять с кода...

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

В файле с расширением * .cpp, исключить из листинга все комментарии вида "//»
Помогите пожалуйста с заданием В файле с расширением * .cpp, содержащий текст программы на языке...

Программа удаляющая программы
Привет всем! Хочу написать программу удаляющую другие программы (как Add or Remove Programs в...

5
934 / 759 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.10.2011, 18:14 2
federe, вот написал freeware версию, как вариант используй, если ошибки будут выбрось в топку.
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
#include <fstream>
#include <iostream>
using namespace std;
string comment_erase(string str);
 
int main(){
   char filename[255];
   char outname[255];
   strcpy(filename, "D:\\sample.cpp"); // имя открываемого файла
   strcpy(outname,  "D:\\no_comment.cpp"); // имя выходного файла
 
   // открываем файл любой из (.cpp, .h, .c, .hpp)
   fstream fp(filename, fstream::in);
   if(! fp.is_open())
        return 1;
   long    size;
   string  str;
   fp.seekg(0L, ios::end);  // перемещаем ф-указатель в конец файла
   size = fp.tellg();    // получаем кол-во байт файла
   fp.seekg(0L, ios::beg);  // устанавливаем ф-указатель в начало
   if(! size) {  // если файл не имеет байтов закрываем прогу
        fp.close();
        return 2;
   }
   char* buf = new char[size];  // выделяем буфер под все байты из файла
   if(buf == NULL) { //ошибка кучи или не хватка ОЗУ
        fp.close();
        return 3;
   }
   fp.read(buf, size); // читаем весь файл в буфер
   fp.clear();
   fp.close();
 
   buf[size - 1] = '\0';
   str.assign(buf);   // передаём буфер объекту string для последующего анализа текста
   delete[] buf;  // очищаем кучу
   buf = NULL;
 
   str = comment_erase(str); // удаляем комментария
 
   fp.open(outname, fstream::out); // создаём другой файл(вдруг что-то важное в оригинале удалим)
   if(! fp.is_open())
       return 4;
   fp.write(str.c_str(), str.length());// записываем в выходной файл
   fp.flush();
   fp.clear();
   fp.close();
   return 0;
}
 
string comment_erase(string str) {
   int  id;
   string::iterator tmp, last;
   for(string::iterator  iter = str.begin(); iter != str.end(); *iter++) {
          if( *iter == '"') // в строках никогда комментария не ищем
               for(iter += 1; *iter != '"' && iter != str.end(); *iter++);
        
          if(*iter == '/') {  // встречается обратная черта, а вдруг это не деление а началo многострчного комментария
                if(*(iter + 1) == '/') { // и так это однострочный комментарий
                      for(last = iter + 1; *last != '\n' && last != str.end(); *last++);
                      tmp = iter - 1;
                      str.erase(iter, last);  // удаляем диапaзон между N = last - iter
                      iter = tmp;
                } else if( *(iter + 1) == '*') { // а может быть это многострочный комментарий
                     id = 0;
                     for(last = iter + 1; last + 1 != str.end(); *last++) {
                           if( *last == '*' && *(last + 1) == '/') {  // ищем конец многострочнго комментария
                                 id = 1;
                                 last += 2;
                                 break;    // если конец найден прерываем цикл для удаления
                            }
                     }
                     if(id) { 
                          // сохраним позицию итератора чтобы не бегать всё заново по тексту
                         tmp = iter - 1; 
                         str.erase(iter, last);  // тоже самое удаление диапазона комментария
                         iter = tmp;  // продолжаем работу в поиске комментарий
                     }
                }
        }
    }
    return str;
}
1
2832 / 1641 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
05.10.2011, 22:01 3
Ограничения freeware версии:
C++
1
'//not a comment'
C++
1
"blah blah blah\"string continued"
C++
1
2
// blah blah blah\
comment continued
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.10.2011, 06:34 4
Удалить комментарии из файла. Помогите найти ошибку.
0
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 5
08.10.2011, 22:02  [ТС] 5
можете обьяснить что как происходит в этой проге? у меня эта курсовая,а я не очень понимаю..
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.10.2011, 12:17 6
есть множество состояний, для каждого состояния есть свой набор действий, в том числе и по переходу в другие состояния
wiki. конечный автомат
wiki. конечный автомат. примеры
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2011, 12:17
Помогаю со студенческими работами здесь

Программа,удаляющая все чётные цифры из строки
Программа,удаляющая все чётные цифры из строки

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

Удаление комментариев из листинга программы
Создать программу, которая будет удалять из листинга программы на языке с++ (файл*.cpp) коментарии...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru