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

Удалить из строки комментарии вида '/* . */". Игнорировать вложенные комментарии - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Необходимо в последовательности символов переставить заданную букву со следующей за ней. http://www.cyberforum.ru/cpp-beginners/thread1088863.html
Всем привет! Кто может помогите. Необходимо в последовательности символов переставить заданную букву tt со следующей за ней. #include <stdio.h> #include <conio.h> main() { int m; char stroka={0}, c1, tt; printf("\nInput symbol: "); // Вводим символ scanf("%c",&tt);
C++ Ошибка составления std::regex в C++11 Есть вот такой пример кода: #include <iostream> #include <string> #include <regex> int main() { std::string fnames = {"foo.txt", "bar.txt", "zoidberg"}; try { std::regex txt_regex("+\\.txt"); http://www.cyberforum.ru/cpp-beginners/thread1088822.html
C++ Поменять местами минимальный и максимальный элементы массива
Привет всем, помогите составить программку для этой задачи. Поменять местами минимальный и максимальный элементы массива. Использовать функцию для каждой строки матрицы В (5, 4).
C++ Переопределение операции инкремента
Добрый вечер! Задачка простая и кода с примерами в сети куча, но меня волнует вопрос почему компилятор ругается на мой код: Myclass operator ++ (Myclass& value, int) { return value.a++; } Ошибка: слишком много параметров для этой функции оператора Не могу понять в чем беда, я видел кучу примеров в которых для операции инкремента передавалось в параметрах 2 значения. Можно было бы...
C++ В чем ошибки http://www.cyberforum.ru/cpp-beginners/thread1088755.html
// The header file Sort.h #include<iostream> #include<cassert> using namespace std; template<class T> inline void swap(T array,int pos1,int pos2) { T temp;
C++ Сложение по модулю (2^32) -1) Добрый вечер! Подскажите как реализовать сложение по модулю ((2^32) -1). Есть текстовый файл. Я считываю его, перевожу считанные данные в биты, в результате получается массив из нулей и единиц. Его размер равен 32. Мне нужно сложить его с другим массивом такого же размера по модулю ((2^32) -1). Есть кое-какие соображения, но естественно делаю неправильно. int oneMas =... подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
04.02.2014, 18:55     Удалить из строки комментарии вида '/* . */". Игнорировать вложенные комментарии
Когда-то давно нужна была такая функциональность. Исходник сохранился. Он не на 100% корректен, косячит, когда внутри кавычек попадаются тексты, выглядящие как комментарии. Вложенные комментарии, не отсекаются, т.к. в Си\Си++ они запрещены и у нас, естественно, не было кривых исходников

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
 
static void
decomment_file (const char *file_name)
{
  FILE *fp;
  int ch, next, is_inside_comment, is_inside_quote;
 
  fp = fopen (file_name, "r");
  if (fp == NULL)
    {
      fprintf (stderr, "can not open %s (%s)\n", file_name, strerror (errno));
      exit (1);
    }
 
  is_inside_comment = 0;
  is_inside_quote = 0;
  while ((ch = fgetc (fp)) != EOF)
    {
      if (is_inside_quote)
        {
          /* С точки зрения наших нужд можно было бы вырезать
           * текст в том числе и внутри кавычек. В иделале надо делать
           * более масштабную правку, а то пропадает закрывающая кавычка */
          /* FIXME если внутри кавычек имеется \" то это НЕ закрывает кавычки,
           *       надо это учитывать. При этом есть ещё \\ */
          if (1)
            putchar (ch);
 
          if (ch == '\"')
            is_inside_quote = 0;
        }
      else if (is_inside_comment)
        {
          if (ch == '*')
            {
              next = fgetc (fp);
              if (next == '/')
                is_inside_comment = 0;
            }
        }
      else
        {
          if (ch == '\"')
            is_inside_quote = 1;
          else if (ch == '/')
            {
              next = fgetc (fp);
              if (next == '*')
                {
                  is_inside_comment = 1;
                  continue;
                }
 
              putchar (ch);
              ch = next;
            }
 
          putchar (ch);
        }
    }
}
 
int
main (int argc, char **argv)
{
  if (argc != 2)
    {
      fprintf (stderr, "Usage: %s <file_name>\n", argv[0]);
      exit (1);
    }
 
  decomment_file (argv[1]);
  return 0;
}
 
Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru