Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ switch... case и #include http://www.cyberforum.ru/cpp-beginners/thread360869.html
как добавить source код в case как это делается правольно #include "stdafx.h" #include "conio.h" #include "stdio.h" #include "iostream" void main() {
C++ деление на 0 у меня есть код задачи .. помогите пожалуйста.. надо переделать код, чтобы в 14 строчке (case '/': cout<<"4astka\t"<<b/c<<endl; break;) было условие деления на ноль... с предупреждением. Через if #include <iostream> using namespace std; int main() { char a; int b,c; cout<<"Vvedit viraz vidy: Cifra Operacia Cifra:"<<endl; cin>>b>>a>>c; switch (a) http://www.cyberforum.ru/cpp-beginners/thread360843.html
Проблема с типами C++
#include <cstdlib> #include <iostream> #include <fstream> using namespace std; const int cN=100; struct pirkinys { char pav;
Не могу разобраться с задачками C++
Здраствуйте все. я не могу понять как сделать эти задачки Мне надо их через массивы сделать и на языке Си Помогите пожалуйста буду очень вам благодарен.
C++ как писать в консольных программах на русском в c++ http://www.cyberforum.ru/cpp-beginners/thread360800.html
как писать в консольных программах на русском в c++
C++ Динамический массив класса помогите пожалуйста,суть задачи:создать ксласс с конструктором и деструктором,в конструкторе сделать динамический масив с рандомными числами следовательно вывести их и посчитать средне орефметическое значение массива! подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.10.2011, 18:14     Программа удаляющая все комментарии из листинга программы С++
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;
}
 
Текущее время: 23:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru