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

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

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

Студворк — интернет-сервис помощи студентам
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2014, 13:03
Ответы с готовыми решениями:

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

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

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

50
06.01.2014, 20:42
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от trans967 Посмотреть сообщение
3 курс
Грустно.

0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 20:48  [ТС]
сохранил - ошибка:
[Linker Error] Unresolved external '_getline' referenced from...

как исправить,скажите пожалуйста
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 20:50
Всегда думал, что функция стандартная. Какой компилятор так чудит?
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 20:51  [ТС]
С++ Builder 6

при воспроизведении программы.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 20:52
Ок, вру, оно гнутое.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 20:58  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Ок, вру, оно гнутое.
а что теперь делать?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 20:58
Во-первых, в первом же посте есть пример работы с std::cin.getline() - что мешает подправить код с его использованием? Уже по готовому.
Во-вторых, пусть и не в этом дело, но почему все так упорно используют шестой билдер? Я гоню или ему уже больше 10 лет?
В-третьих, ок, пофиг, раз такое дело, переезжаем частично на плюсы.
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 <cstdio>
#include <cstdlib>
#include <cstring>
 
#include <iostream>
 
int main()
{
    const int line_len = 512;
    char code_line[line_len];
 
    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 (std::cin.getline(code_line, line_len))
    {
        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\n", 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\n", code_line);
            }
        }
    }
 
    return 0;
}
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:04
trans967, А я пытался не получилось, адрес указателя увеличиваю на 1, а он как был старый так и остался. Ну ладно короче тебе уже помогли и без меня.
0
06.01.2014, 21:05

Не по теме:

ninja2, да ладно, такие задачи не для гуру.

2
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 21:10  [ТС]
а у меня много всяких ошибок выдаёт [C++ Error]
типа нельзя printf использовать,а так же [C++ Warning]
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:13
Кто знает чо у меня указатель не увеличивает адрес?
Делаю begin++ и он как указывал на старый адрес, так и продолжает указывать на него
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <regex>
#include <cstring>
using namespace::std;
 
 
int main()
{
    char s[]="hellow world /*gacpada\n cledyyucha9\n */ ctroka kod //koment \n 3ctroka";
    char comment_odnostr[1000]={0};
    char comment_mnogostr[1000]={0};
    char* begin=strstr(s,"//");
    char* end=strstr(s,"\n");
    int i(0);
    cout <<&begin<<endl;//начальный адрес
    begin++;//увеличеваем адрес
    //begin=begin+1;
    cout <<&begin<<endl;//и ничего не увеличивается
    exit(1);
 
    return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,281
06.01.2014, 21:15
C++
1
cout <<begin<<endl;//начальный адрес
Апострофа не надо, begin и так указатель.
Вы выводите номер ячейки, в которой этот указатель сидит.
Он естественно не меняется.
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:18
zss, А как мне узнать адрес той ячейки на которую я щас перешол?
0
06.01.2014, 21:19

Не по теме:

Цитата Сообщение от trans967 Посмотреть сообщение
а у меня много всяких ошибок выдаёт [C++ Error]
У меня сейчас дилемма.
С одной стороны, как человек, добровольно решивший помочь, мой моральный долг - довести дело до конца. Т.е. привести код в тот вид, в котором он будет работать у пользователя. При этом мне, по идее, должно быть все равно в каком окружении работает пользователь, поскольку игнорирование среды - это все-таки непрофессионально.

С другой стороны, у меня нет возможности достаточно быстро проверить в чем именно проблема, поскольку у меня основная система - убунта, и древний шестой билдер рядом не валялся. Более того, автор не приводит сообщений об ошибках, а только сообщает о факте их наличия, что вынуждает меня отмахнуться "А у меня работает", ну и максимум выразить сочувствие неспособности читать, анализировать и исправлять ошибки.

Желание кинуть что-нибудь тяжелое, пожалуй, залью вкусным чаем.

0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:24
zss, От написал код, но мне нужно в цикле не значения сравнивать, а именно адреса ячеек, как мне узнать адрес ячейки от код:
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
#include <iostream>
#include <string>
#include <regex>
#include <cstring>
using namespace::std;
 
 
int main()
{
    char s[]="hellow world /*gacpada\n cledyyucha9\n */ ctroka kod //koment \n 3ctroka";
    char comment_odnostr[1000]={0};
    char comment_mnogostr[1000]={0};
    char* begin=strstr(s,"//");
    char* end=strstr(s,"\n");
    int i(0);
 
    if(begin!=0&&end!=0)
    {
        for(;*begin!=*end;begin++)
        {
            comment_odnostr[i++]=*begin;
        }
    }
    comment_odnostr[i]='\0';
    cout <<"comment_odnostr= "<<comment_odnostr<<endl;
    
/*  //Многострочный коммент
    begin=strstr(s,"/*");
    end=strstr(s,"*///");
/*  i=0;
    if(begin!=0&&end!=0)
    {
        cout <<"one"<<endl;
        cout <<"begin= "<<begin<<endl<<endl;
        cout <<"end= "<<end<<endl<<endl;
        for(;&begin!=&end;begin++)
        {
            cout <<*begin<<endl;
            comment_mnogostr[i++]=*begin;
        }
        cout <<"two"<<endl<<endl;
        cout <<"comment_mnogostr= "<<comment_mnogostr<<endl;
        exit(1);
    }
    comment_mnogostr[i]='\0';
    cout <<"comment_mnogostr= "<<comment_mnogostr<<endl;
 
    */
    return 0;
}
Добавлено через 1 минуту
Кто не понял, от в этом цикле нужно не значения сравнивать, а именно адреса ячеек for(;*begin!=*end;begin++)

Добавлено через 50 секунд
0x10, Да я тоже чувачку решил помощь, от растянулась помощь на несколько часов .
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 21:25  [ТС]
C++
1
typedef __stl_mbstate_t mbstate_t;
вот тут ошибка :[C++ Error] _mbstate h(52); E2257, expected


как я понял, код на C++, но ввод/вывод осуществляется же через C.
Вообще понять не могу что-то, уж извините за мою тупость
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 21:33
Мне гугл подсказывает, что такая ошибка появляется если код С++ собирать как сишный проект.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 21:36  [ТС]
так это я понял.
просто у вас там и код с С и код с С++, вот и не понимаю,что делать.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:50
trans967, На попробуй лучше мой код, я от токо доделал:
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
#include <iostream>
#include <cstring>
using namespace::std;
 
 
int main()
{
    char s[]="hellow world /*gacpada \ncledyyucha9 */ ctroka kod //koment \n 3ctroka";
    char comment_odnostr[1000]={0};
    char comment_mnogostr[1000]={0};
    char* begin=strstr(s,"//");
    char* end=strstr(begin,"\n");
    int i(0);
 
    if(begin!=0&&end!=0)
    {
        for(;begin!=end;begin++)
        {
            comment_odnostr[i++]=*begin;
        }
    }
    comment_odnostr[i]='\0';
    cout <<"comment_odnostr= "<<comment_odnostr<<endl;
    
    //Многострочный коммент
    begin=strstr(s,"/*");
    end=strstr(begin,"*/");
    i=0;
    if(begin!=0&&end!=0)
    {
        for(;begin!=end;begin++)
        {
            comment_mnogostr[i++]=*begin;
        }
    }
    comment_mnogostr[i]='\0';
    cout <<"comment_mnogostr= "<<comment_mnogostr<<endl;
 
    return 0;
}
Добавлено через 56 секунд
trans967, И нафиг этот Си это ппц просто, эти тупые низкоуровневые функции кумарят.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 21:57  [ТС]
у вас программа ничего не делает
comment_odnostr= //koment
comment_mnogostr= /*gaspada
cledyyucha9

вот,что выводит в окне,а пользователь даже код не вводит,где искать комментарии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2014, 21:57

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru