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

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

06.01.2014, 13:03. Показов 2674. Ответов 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
0x10
06.01.2014, 20:42     Нахождение двухстрочных комментариев
  #21

Не по теме:

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

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

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

при воспроизведении программы.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 20:52 25
Ок, вру, оно гнутое.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 20:58  [ТС] 26
Цитата Сообщение от 0x10 Посмотреть сообщение
Ок, вру, оно гнутое.
а что теперь делать?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 20:58 27
Во-первых, в первом же посте есть пример работы с 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
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:04 28
trans967, А я пытался не получилось, адрес указателя увеличиваю на 1, а он как был старый так и остался. Ну ладно короче тебе уже помогли и без меня.
0
0x10
06.01.2014, 21:05
  #29

Не по теме:

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

2
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 21:10  [ТС] 30
а у меня много всяких ошибок выдаёт [C++ Error]
типа нельзя printf использовать,а так же [C++ Warning]
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:13 31
Кто знает чо у меня указатель не увеличивает адрес?
Делаю 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
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
06.01.2014, 21:15 32
C++
1
cout <<begin<<endl;//начальный адрес
Апострофа не надо, begin и так указатель.
Вы выводите номер ячейки, в которой этот указатель сидит.
Он естественно не меняется.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:18 33
zss, А как мне узнать адрес той ячейки на которую я щас перешол?
0
0x10
06.01.2014, 21:19
  #34

Не по теме:

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

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

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

0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:24 35
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  [ТС] 36
C++
1
typedef __stl_mbstate_t mbstate_t;
вот тут ошибка :[C++ Error] _mbstate h(52); E2257, expected


как я понял, код на C++, но ввод/вывод осуществляется же через C.
Вообще понять не могу что-то, уж извините за мою тупость
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.01.2014, 21:33 37
Мне гугл подсказывает, что такая ошибка появляется если код С++ собирать как сишный проект.
0
7 / 3 / 0
Регистрация: 23.04.2013
Сообщений: 203
06.01.2014, 21:36  [ТС] 38
так это я понял.
просто у вас там и код с С и код с С++, вот и не понимаю,что делать.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.01.2014, 21:50 39
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  [ТС] 40
у вас программа ничего не делает
comment_odnostr= //koment
comment_mnogostr= /*gaspada
cledyyucha9

вот,что выводит в окне,а пользователь даже код не вводит,где искать комментарии
0
06.01.2014, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2014, 21:57
Помогаю со студенческими работами здесь

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

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

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

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


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

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