Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
1

Нахождение двухстрочных комментариев

06.01.2014, 13:03. Показов 2671. Ответов 50
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include<iostream>
#include<string>
using namespace std;
int main()
{
    char str[100];
    cout<<"fragment koda please"<<endl;
    cin.getline(str,99);
    char* cbegin=strstr(str, "/*");
    if(cbegin!=NULL)
    {
        char* cend=strstr(cbegin+2, "*/");
        while(cbegin!=NULL)
        {
            if (cend==NULL)
            {
                for(char* pc=cbegin+2;pc!=str+strlen(str);pc++)
                    cout<<*pc;
                cout<<endl;
                break;
            }
            for(char* pc=cbegin+2;pc!=cend;pc++)
                cout<<*pc;
            cout<<endl;
            cbegin=strstr(cend+2, "/*");
            cend=strstr(cend+2, "*/");
        }
    }
    system("pause");
    return 0;
}
а вот как добавить сюда нахождение ещё и двухстрочных комментов?
т.е. //* *//

заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2014, 13:03
Ответы с готовыми решениями:

Регулярное выражение: нахождение комментариев в тексте
Добрый день, Как найти в коде комментарий такого вида: /* Такой комментарий*/ /* Или такой.......

Вывод рекламы в списке комментариев (через каждый 10 комментариев) в WordPress
Привет! Подскажите как сделать вывод рекламы (adsense) в списке комментариев (через каждый 10...

Вывод комментариев
Уважаемые форумчане! Что то мне кажется, что я пошел не в том направлении. На данный момент у меня...

Подгрузка комментариев
Всем доброй ночи. Прошу помощи в таком вопросе. Нужно что бы на странице со списком постов можно...

50
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
06.01.2014, 14:20 2
Алгоритм такой.
1. Дополнительно заводим переменную bool CommBegin=false;("Признак начала комментария")
2. Внутри цикла как и раньше ищем /* . Когда найдем делаем CommBegin=true;
3. Если CommBegin истина, то очередной символ - комментарий, и ищем */,
когда найдем снова делаем CommBegin=false;

Дерзайте!
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 14:37 3
Регулярные выражения используй от могу тебе написать "/\\*(?:\\s|.)*?\\*/" - должно находить однострочные комментарии.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 15:38  [ТС] 4
Уважаемые,напишите пожалуйста дополнительный код с комментариями.
Я вообще ничего понять не могу
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 16:18 5
Цитата Сообщение от trans967 Посмотреть сообщение
Уважаемые,напишите пожалуйста дополнительный код с комментариями.
Я вообще ничего понять не могу
Тут нечего комментировать простейший код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <regex>
#include <string>
using namespace::std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string s="sadjflasdjkf;lksadf /*строка 1 \n строка 2 \r\n\t строка 3 */";
    string result="";
 
    smatch sm;
    if(regex_search(s,sm,regex("/\\*(.|\\s)*?\\*/"))) result=sm[0].str();
    cout <<"result= "<<result<<endl;
 
    return 0;
}
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 17:24  [ТС] 6
#include <regex>

у меня на этой строке ошибку выдаёт.
нельзя включить такой файл.
Ах да, забыл.
Реализовывать надо исключительно через функцию strstr
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 18:07 7
Цитата Сообщение от trans967 Посмотреть сообщение
#include <regex>
у меня на этой строке ошибку выдаёт.
нельзя включить такой файл.
Ах да, забыл.
Реализовывать надо исключительно через функцию strstr
У тебя наверно стандарт 2011 не поддерживается, нет через эти функции тяжело реализовывать.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 18:55  [ТС] 8
тяжело,но нужно именно через них.
я же написал код,там чуть-чуть изменить просто надо
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 19:00 9
trans967, Не старичок у тебя код большой и тяжелый для понимания от тебе рв для нахождения однострочного комментария "/\\*.*|//.*". Неохота в циклы вникать когда есть такая штука как <regex>
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 19:02  [ТС] 10
ну я же тоже не просто так пишу,что должна быть именно эта функция
должна 100% быть именно эта функция
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 19:07 11
Цитата Сообщение от trans967 Посмотреть сообщение
ну я же тоже не просто так пишу,что должна быть именно эта функция
должна 100% быть именно эта функция
да ясно жди студень, бог поможет!
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 19:26  [ТС] 12
буду надеятся,что кто-нибудь из людей поможет
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 19:42 13
Цитата Сообщение от trans967 Посмотреть сообщение
буду надеятся,что кто-нибудь из людей поможет
Ну старичок измени прогу сам, что тебе неясного как делать? Если ты первую часть сам делал, то что тебе сложно сделать проверку для многострочного коммента?
Что у тебя концом для однострочного комента является? я думаю символ конца строки '\n'
Для многострочного что будет концом? Два символа "*/"
Ну находи символ * и следом за ним проверяй сразу же символ '/' Если его находишь, то это комментарий.

Я вообще смотрю на твой код ты что там в нем находишь и что ты считаешь однострочным комментарием этот символ "/* комментарий */" ? Так это многострочный комментарий , однострочный это "//комментарий".
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 19:49  [ТС] 14
как мне объяснили, односрочный - с 1 /, многострочный - с 2/
код мне помогали делать, естественно.
если бы я сам делал весь код - я бы не задавал тут этот вопрос
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 19:51 15
Цитата Сообщение от trans967 Посмотреть сообщение
как мне объяснили, односрочный - с 1 /, многострочный - с 2/
код мне помогали делать, естественно.
если бы я сам делал весь код - я бы не задавал тут этот вопрос
А теперь я тебе объясню "школупень"!
Однострочный начинается с "//" и заканчивается концом строки символом "/n"
Многострочный начинается с "/*" и заканчивается символом "*/"

Так что заново переделывай!
1
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 19:53  [ТС] 16
так а в чём для вас сложность дописать(как я понял) пару строчек кода в мою программу?
Вы же гуру С++, помогите,а
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 19:54 17
Цитата Сообщение от trans967 Посмотреть сообщение
так а в чём для вас сложность дописать(как я понял) пару строчек кода в мою программу?
Вы же гуру С++, помогите,а
Да я призабыл эти функции, ну ок щас попробую уговорил!
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 20:04  [ТС] 18
большое спасибо, если получится - буду очень-очень благодарен
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 20:21 19
Плохо писать такие портянки, но для первого курса сойдет (или где такие задания дают).
В качестве входных данных - этот же самый файл.
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
/*\
|*| Этот комментарий добавлен исключительно для демонстрации работы на таких
|*| извращенных входных данных.
|*|
|*| (C) 2014
\*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    char* code_line = NULL;
    size_t n = 0;
 
    int in_comment = 0; /* true если в процессе поиска конца комментария */
 
    const char* const comment_open_tag = "/""*";
    const char* const comment_close_tag = "*""/";
 
    const char* comment_begin;
    const char* comment_end;
 
    /* Задача чисто сишная, будем пользоваться сишными функциями */
    while (getline(&code_line, &n, stdin) != -1)
    {
        if (!in_comment)
        {
            /* Попытаемся найти начало комментария в текущей строке */
            comment_begin = strstr(code_line, comment_open_tag);
 
            /*
             * Если нашли, возможны варианты:
             * 1. Комментарий заканчивается в этой же строке.
             * 2. Комментарий заканчивается в другой строке
             */
            if (comment_begin)
            {
                comment_end = strstr(comment_begin, comment_close_tag);
 
                /* Нашли конец комментария в этой же строке */
                if (comment_end)
                {
                    /* хитрый синтаксис для вывода части строки */
                    printf("%.*s\n", (int)(comment_end - comment_begin + 2),
                        comment_begin);
                }
                else
                {
                    printf("%s", code_line);
                    /* иначе запомним, что нужно найти конец комментария */
                    in_comment = 1;
                }
            }
        }
        else
        {
            comment_end = strstr(comment_begin, comment_close_tag);
            if (comment_end)
            {
                printf("%.*s\n", (int)(comment_end - code_line + 2), code_line);
                in_comment = 0;
            }
            else
            {
                printf("%s", code_line);
            }
        }
    }
 
    free(code_line);
 
    return 0;
}
Пример:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ ./a.out < main.c 
/*\
|*| Этот комментарий добавлен исключительно для демонстрации работы на таких
|*| извращенных входных данных.
|*|
|*| (C) 2014
\*/
/* true если в процессе поиска конца комментария */
/* Задача чисто сишная, будем пользоваться сишными функциями */
/* Попытаемся найти начало комментария в текущей строке */
            /*
             * Если нашли, возможны варианты:
             * 1. Комментарий заканчивается в этой же строке.
             * 2. Комментарий заканчивается в другой строке
             */
/* Нашли конец комментария в этой же строке */
/* хитрый синтаксис для вывода части строки */
/* иначе запомним, что нужно найти конец комментария */
1
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 20:41  [ТС] 20
3 курс, КПИЯП
0
06.01.2014, 20:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2014, 20:41
Помогаю со студенческими работами здесь

Перенаправление с комментариев
После установки на хостинге вордпресс версии 5.2.3 возникли проблемы с отправкой комментариев. В...

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

Удаление комментариев
Помогите реализовать простую программу: 1. Загружается файл 1.txt; 2. Находятся и удаляются все...

Форма комментариев
Привет всем, нужна помощь, настроил плагин WordPress Popular Posts, но в статье над формой вывело...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru