С Новым годом! Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 21.11.2019
Сообщений: 15

Вывести на экран названия всех классов из файла C++

06.05.2020, 17:19. Показов 1507. Ответов 4

Студворк — интернет-сервис помощи студентам
Вывести на экран названия всех классов, определенных в заданном файле с программой на C++. Необходимо также проверить расширение файла и выдать сообщение об ошибке, если оно не соответствует расширениям файлов с кодом на C++.
Например,
./foo.sh test.cpp
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
# This is a comment
#  cd Desktop/;bash try.sh
 
cd /home/karl_weierstrass/Desktop/forOS
echo file $1
#cat $1
 
a=`file $1`;
 if [[ $a =~ 'C++ source' ]] ; then  
   echo "ok, it\'s c++ file"; 
else 
    echo "not a c++ file"
    grep -w 'class' $1
echo fuck
     cat $1| grep ^class |uniq
    kill $$
   fi ;x
Выводится строка содержащая слово class вместо того чтоб выводить только имя класса
Нет проверки расширения
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2020, 17:19
Ответы с готовыми решениями:

Вывести на экран названия объектов, которые находятся во всех множествах одновременно
Множества Придумать список некоторых объектов, например, названия товаров в магазинах; виды полезных ископаемых, которые добывают в...

Вывести на экран названия объектов, которые находятся во всех множествах одновременно
Всем привет. Нужна ваша помощь. Мне было задано задание: Как делать с числовыми элементами множества я немного представляю. Но вот...

Вывести на экран названия всех дней недели, начинаються с указанной буквы
Составить программу, по первой букве в названии дня недели выводит на экран названия всех дней недели, начинаються с указанной буквы, при...

4
 Аватар для CoreSys
20 / 17 / 3
Регистрация: 03.05.2020
Сообщений: 50
06.05.2020, 17:54
Для начала залейте сюда кусочек кода с class'ом который нужно обработать!
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
06.05.2020, 18:01
Лучший ответ Сообщение было отмечено ChopaP как решение

Решение

Bash
1
2
[ "${1##*.}" = cpp ] || echo ERROR
grep -oP '^\s*class\s+\K\w+' "$1" | sort -u
1
1 / 1 / 0
Регистрация: 21.11.2019
Сообщений: 15
06.05.2020, 18:38  [ТС]
CoreSys,
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include "mob.h"
#include <iostream>
#include <cstring>
using namespace std;
// not a class lol
 
//mob::ID=0;
mob::mob():unic_id(ID++),rase(human)
{
   name=new char[8];
   strcpy(name,"unnamed\0");
   movable=true;
   state=normal;
}
mob::mob(const char* Name,const parse State,const Rase rrase,bool moves):unic_id(++ID),rase(rrase)
{
 name=new char[strlen(Name)+1];
   strcpy(name,Name);
 movable=moves;
 state=State;
}
 
mob::~mob()
{
    delete[] name;
}
 
mob::mob(const mob& other):unic_id(++ID),rase(human)
{
name=new char[strlen(other.name)+1];
   strcpy(name,other.name);
   movable=other.movable;
 state=other.state;
}
mob& mob::operator=(const mob& other){
if(&other!=this){
delete[] name;
name=new char[strlen(other.name)+1];
   strcpy(name,other.name);
   movable=other.movable;
 state=other.state;
}
return *this;
}
parse mob::get_state()const{return state;}
 
Rase mob::get_rase()const{return rase;}
 
bool mob::get_moves()const{return movable;}
 
int mob::get_id()const{return unic_id;}
 
void mob::set_name(const char* pname){
delete[] name;
name=new char[strlen(pname)+1];
   strcpy(name,pname);}
 
void mob::set_state(const parse A){state=A;}
void mob::set_moves(const bool A){movable=A;}
bool mob::operator<(const mob& other)const{return strcmp(name,other.name);}
ostream& mob::print(ostream& oss)const{
const char* TT[3]={"human","dwarf","elf"};
const char* Tt[3]={"normal","stunned","dead"};
oss<<name<<" "<<unic_id<<" "<<TT[rase]<<" "<<Tt[state];
return oss;
}
ostream& operator<<(ostream& oss,const mob& A){
return A.print(oss);
}
 
 
class Stud
{
public:
    string name;
    string group;
    vector<int> marks;
    Stud()
    {
        name = "noname";
        group = "nogroup";
    }
    Stud(const string &Name, const string &Group, const vector<int>&Marks)
    {
        name = Name;
        group = Group;
        marks = Marks;
    }
    Stud(const Stud &s)
    {
        name = s.name;
        group = s.group;
        marks = s.marks;
    }
    const Stud& operator =(const Stud &s)
    {
        if (this != &s)
        {
            name = s.name;
            group = s.group;
            marks = s.marks;
        }
        return *this;
    }
    friend ostream& operator << (ostream &os,const Stud &s)
    {
        os << "name: " << s.name << "\tgroup: " << s.group << "\tMarks: ";
        for (int i = 0; i < s.marks.size(); i++)
            os << s.marks[i] << " ";
        return os;
    }
    bool operator < (const Stud &s)
    {
        return name < s.name;
    }
    double average()
    {
        double sum = 0;
        for (int i = 0; i < marks.size(); i++)
            sum += marks[i];
        if (marks.size() == 0) return 0;
        return sum / marks.size();
    }
 
};
class Stud
{
public:
    string name;
    string group;
    vector<int> marks;
    Stud()
    {
        name = "noname";
        group = "nogroup";
    }
    Stud(const string &Name, const string &Group, const vector<int>&Marks)
    {
        name = Name;
        group = Group;
        marks = Marks;
    }
    Stud(const Stud &s)
    {
        name = s.name;
        group = s.group;
        marks = s.marks;
    }
    const Stud& operator =(const Stud &s)
    {
        if (this != &s)
        {
            name = s.name;
            group = s.group;
            marks = s.marks;
        }
        return *this;
    }
    friend ostream& operator << (ostream &os,const Stud &s)
    {
        os << "name: " << s.name << "\tgroup: " << s.group << "\tMarks: ";
        for (int i = 0; i < s.marks.size(); i++)
            os << s.marks[i] << " ";
        return os;
    }
    bool operator < (const Stud &s)
    {
        return name < s.name;
    }
    double average()
    {
        double sum = 0;
        for (int i = 0; i < marks.size(); i++)
            sum += marks[i];
        if (marks.size() == 0) return 0;
        return sum / marks.size();
    }
 
};
class ahaha
{
public:
    string name;
    string group;
    vector<int> marks;
    Stud()
    {
        name = "noname";
        group = "nogroup";
    }
};
0
 Аватар для CoreSys
20 / 17 / 3
Регистрация: 03.05.2020
Сообщений: 50
06.05.2020, 19:31
Bash
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash                                                                                                                             
cpp=( `file --brief $1` )                                                                                                   
if [[ ${cpp[0]} == 'C++' ]]; then                                                                                                       
  cat <<-_EOF_
    Ok, it\'s c++ file $1
    Class names:
_EOF_
  sed -n "/^class /p" $1 | awk '{print $2}' | uniq --count 
else
  printf "Not a c++ file $1\n"
fi
exit $?
Добавлено через 13 минут
Цитата Сообщение от ChopaP Посмотреть сообщение
a=`file $1`;
Здесь желательно зарыть значение переменной в мягкие кавычки
Цитата Сообщение от ChopaP Посмотреть сообщение
echo "ok, it\'s c++ file";
Здесь не надо экранировать жесткую кавычку
Цитата Сообщение от ChopaP Посмотреть сообщение
fi ;x
Что за ";x" ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2020, 19:31
Помогаю со студенческими работами здесь

Вывести на экран названия объектов, которые находятся во всех множествах одновременно
определить список из 10 фамилий. построить 5 множеств из различных элементов этого списка. вывести на экран названия объектов, которые...

Вывести на экран названия объектов, которые находятся во всех множествах одновременно
12 Создайте приложение. Определить список из 10 названий городов. Построить 5 множеств из различных элементов этого списка. Вывести на...

Вывести на экран названия объектов, какие есть у всех множественных числах одновременно.
Используя type t1=(золото. медь, серебро, нефть, железо. ртуть, свинец, марганец, уголь, газ); построить пять множественных чисел, которые...

Получить названия всех функций, классов, методов и т.д. с параметрами из библиотеки .dll
Здравствуйте. Появилась задача, уже написанная в заголовке. Пытался гуглить, нашел только что-то на VB6, но мне нужно именно на .Net. Прошу...

Вывести всех мужчин из файла на экран
Доброго времени суток! Подскажите, пожалуйста, есть структура ФИО, пол, возраст. Записи вводятся с клавиатуры. Необходимо сохранить эту...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru