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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
уТатьяна
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 16
#1

Удаление из текста программы комментариев с использованием списков - C++

15.02.2013, 20:37. Просмотров 1147. Ответов 2
Метки нет (Все метки)

Здравствуйте, уважаемые программисты! Я в С++ только недавно, в программировании совсем ничего еще не смыслю, поэтому обращаюсь к Вам за помощью.
Мне необходимо создать программу, которая используя список, удаляет из текста программы комментарии и помещает их в отдельных текстовый файл.
Помогите пожалуйста! Заранее, спасибо за помощь!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2013, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление из текста программы комментариев с использованием списков (C++):

Удаление комментариев из текста программы с использованием STL, ошибка при выполнении - C++
Здравствуйте решал задачу с использованием STL из книги Страуструпа 6.22 возникла проблема программа вылетает, помогите пожалуйста...

Удаление комментариев из листинга программы - C++
Создать программу, которая будет удалять из листинга программы на языке с++ (файл*.cpp) коментарии вида // коментарий. Для работы с...

Удаление всех комментариев из листинга программы на С++. В чем ошибка? - C++
Выходит ошибка, файл во вложении. Помогите разобраться, пишу программу по программированию, задание курсовой работы: Создать программу...

Удаление комментариев из файла - C++
Решил написать программу которая удаляет комментарии из файла и пишет текст в другой файл, но она вдруг запинается на некоторых...

Решение: Удаление комментариев // и /* */ - C++
может кому пригодится#include <cwchar> #include <ostream> #include <istream> #include <iostream> namespace nocomment { ...

Поиск и удаление комментариев из файла - C++
Добрый вечер. Язык С++ изучаю недавно, помогите, пожалуйста, написать программу. Задача программы: найти комментарии в файле после // или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
16.02.2013, 03:22 #2
У меня была похожая задача(кто-то заказывал, а преподаватели нынче оригинальностью не страдают), только просили найти все оперыторы = и тоже списком (при этом надо было игнорировать комментарии естественно).
Если немного напрячься то можно переиначить код чтобы удалял комментарии (тем более что он их и так ищет ). Операторы = я кстати тогда искал прямо в самом коде программы ...
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
//В исходном тексте на языке Си выделить все операторы присваивания и напечатать их.
//Рекомендации: сначала удалите все комментарии и оформите каждую линию в форме узла списка.
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <cstring>
using namespace std;
 
//комментарий где есть = чтобы продемонстрировать что его программа не должна найти и не найдёт
 
#define list node*
 
//узел списка
//хранит строку кода (без комментариев)
//и указатель на след. элемент
struct node
{
    string str;
    node* next;
 
    //конструктор по умолчанию
    //сохраняется строка и адрес след. элемента (по умолчанию след. элемент = null)
    node(const string line, node* _next=0)
    {
        str = line;
        next=_next;
    }
};
 
 
//добавление элемента в списка
//функция возвращает указатель на голову списка с добавленным элементом
//используется чтобы добавлять очередную строку кода в список
list addElementToList(list lst, const string element)
{
    //текущий узел списка
    node* temp = lst;
 
    //если список пустой то сразу добавляем узел
    if(!lst)
        lst = new node(element);
 
    //иначе ищем хвост и добавляем узел в хвост
    else
    {
        while(temp->next)
            temp=temp->next;
        temp->next = new node(element);
    }
    return lst;
}
 
 
//функция получает адрес файлового потока
//и на основе кода что там делает список со строчками кода
//комментарии при этом пропускаются
list makeList(ifstream& file)
{
    list lst = 0;//результирующий список
    string temp;
 
    //пока есть строчки
    while(!file.eof())
    {
        //считать очередную строку
        getline(file,temp,'\n');
        bool longComment;
 
        //если в ней есть многострочный комментарий 
        if(temp.find("/*")!=string::npos)
        {
            //удаляем всё что после многострочного комментария
            temp.erase(temp.find("/*"),temp.length()-temp.find("/*"));
 
            //если что-то осталось то добавляем его в список
            if(temp.length())
                lst = addElementToList(lst,temp);
 
            //пока не найдём закрывающую скобку для этого многосрочного комментария
            //мы код добавлять в список не будем (по условию)
            while(temp.find("\\*")!=string::npos)
                file>>temp;
        }
        //если есть в строке однострочный комментарий то удаляем его
        else if(temp.find("//")!=string::npos)
            temp.erase(temp.find("//"),temp.length()-temp.find("//"));
 
        //если в конце после всех тех удалений ещё осталось хоть что-то то добавляем это что-то в список
        if(temp.length())
            lst = addElementToList(lst,temp);
    }
 
    return lst;
}
 
//распечатка строк где есть оператор =
//ищет в списке строку и если там есть оператор = (не == и не !=) то выводит эту строку на экран
//так же ведётся подсчёт таких строк отвечающих этому условию
void printStringWithEqually(list lst)
{
    int count = 0;//счётчик подходящих нам строк
 
    //пока в списке есть элементы
    while(lst)
    {
        //ищем в строке оператор =
        int pos = lst->str.find("=");
        
        //если нашли
        if(pos != string::npos)
        {
            //если это действительно =, а не == и не !=
            if(lst->str.at(pos+1) != '=' && lst->str.at(pos-1) != '!' && lst->str.at(pos-1) != '=')  
            {
                //выводим на экран и инкрементируем счётчик на единичку
                cout<<lst->str<<endl;
                count++; 
            }
        }
        lst = lst->next;
    }
    //выводим в конце сколько всего мы нашли подходящих нам строчек
    cout<<endl<<"Count of all string with operator = :"<<count<<endl;
}
 
 
//освобождение памяти из-под списка
void DestroyList(list lst)
{
    node* t;
 
    //пока есть элементы удаляем их
    while(lst)
    {
        t = lst;
        lst = lst->next;
        delete t;
    }
}
 
 
int main()
{
    //открываем файл
    ifstream file("code.c");
 
    //создаём наш список строчек кода без комментов
    list lst = 0;
 
    //если файл не открылся
    if(!file)
    {
        cerr<<"Error when try to open \"code.c\"."<<endl;
        exit(-1);
    }
    else
    {
        //создаём список с кодом без комментов
        lst = makeList(file);
 
        //печатаем те строки где есть оператор =
        printStringWithEqually(lst);
    }
 
    //освобождаем память из-под списка
    DestroyList(lst);
    lst = 0;
 
    //задержка вывода
    system("PAUSE");
    return 0;
}
1
уТатьяна
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 16
16.02.2013, 16:24  [ТС] #3
Спасибо большое!!! Постараюсь переделать!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2013, 16:24
Привет! Вот еще темы с ответами:

Перенос текста в файл без комментариев - C++
Дело такое, нужно написать программу, которая из одного файла, в котором написана рабочая программа с комментариями, переносит текст в...

Удаление комментариев в файле (файл - код програмы на с++ записанв блокноте) - C++
Есть файл(.txt) в котором заисан код проги с комментариями . Как удалить с файла все комментарии ?

Дан текст программы на С++...Записать в выходной файл текст программы без комментариев - C++
( структуры и текстовые файлы)– Чтение данных в массив структур должно производиться из входного текстового файла. Дан текст...

«Хранение и обработка данных с использованием линейных списков». - C++
Вот мне к курсовой работе дали задание.Я не могу его понять, что от меня требуется. Что за система n на прямой? Чем координата от точки...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru