Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 21.11.2019
Сообщений: 15
1

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

06.05.2020, 17:19. Показов 1118. Ответов 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 ****
     cat $1| grep ^class |uniq
    kill $$
   fi ;x
Выводится строка содержащая слово class вместо того чтоб выводить только имя класса
Нет проверки расширения
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2020, 17:19
Ответы с готовыми решениями:

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

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

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

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

4
20 / 17 / 3
Регистрация: 03.05.2020
Сообщений: 50
06.05.2020, 17:54 2
Для начала залейте сюда кусочек кода с class'ом который нужно обработать!
0
Эксперт NIX
2003 / 688 / 229
Регистрация: 28.06.2015
Сообщений: 1,412
Записей в блоге: 16
06.05.2020, 18:01 3
Лучший ответ Сообщение было отмечено 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  [ТС] 4
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
20 / 17 / 3
Регистрация: 03.05.2020
Сообщений: 50
06.05.2020, 19:31 5
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2020, 19:31

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

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

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

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

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

Как вывести названия всех постов списком или просто вывести все посты (названиями/титлами/)
Ребята, подскажите кто в курсе, как вывести я понимаю что нужно использовать цикл foreach , но...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru