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

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

06.05.2020, 17:19. Показов 1504. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый 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 Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru