Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Apollo1222
1 / 1 / 2
Регистрация: 10.10.2016
Сообщений: 136
1

Как сделать, чтобы когда в строке встречалось слово "*Физика", программа выводила эту строку?

06.12.2016, 21:10. Просмотров 829. Ответов 11

У меня есть структура, один из элементов которой - строка. Как сделать, чтобы когда в строке встречалось слово "*Физика", программа выводила эту строку?

Добавлено через 22 минуты
Суть задачи: из структуры с инфой о студентах должен записаться файл, затем он должен считаться, после чего надо записать новый документ, содержащий данные о тех, кто выбрал физику (выбрал это *). Если желающих больше 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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
const int N = 15;
 
struct student
{
    string name, grupa;
    double mark;
    string predmet;
}st[N] = { "Петренко", "1Пі", 5.00 ,"Фізика, Математика, Програмування, Хімія, Історія" ,
"Дмитрук ","2Пі", 4.80 , "*Фізика, Математика, Програмування, Хімія, Історія" , 
"Соменко ","2Пі", 3.90 , "Фізика, Математика, *Програмування, Хімія, Історія" ,
"Тарасюк ","1Кі", 4.00 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
"Змійчук ","1Кн", 4.62 , "Фізика, *Математика, Програмування, *Хімія, Історія" ,
"Панчук ","1Пі",  3.49 , "Фізика, Математика, Програмування, Хімія, *Історія" ,
"Рибчук ","2Кн",  4.68 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
"Тимчук ","1Кі",  5.00 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Кметюк ","1Уб",  4.99 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
"Іванюк","3Кн",   3.20 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Кравчук","2Кі",  4.40 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
"Петелько","1Уб", 4.73 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Івасюк","1Пі",   3.18 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
"Климчук","1Кн",  4.72 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Овчарук","2Кі",  3.33 , "Фізика, *Математика, Програмування, Хімія, Історія" , };
int main(void)
{
    ofstream outfile("lab_13.txt");
    for (int i = 0; i < N; i++)
    {
    outfile << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
    } 
    ifstream infile("lab_13.txt");
    for (int i = 0; i < N; i++)
    {
        infile >> st[i].name >> st[i].grupa>> st[i].mark >> st[i].predmet;
    }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2016, 21:10
Ответы с готовыми решениями:

Как сделать так, чтобы введенное с клавиатуры слово "helllo" в памяти сохранялось в виде "Hello".
Здравствуйте. Подскажите пожалауйста как сделать чтоб согда я вводу с...

Как сделать, так чтобы i и j можно было вводить самому "i" И "j" в цикле, есть программа
#include &lt;iostream&gt; using namespace std; int main() {int a=0,b=0; int i=0;...

Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке
Привет. У меня проблемы с программой. Нужно чтобы программа искала в txt первое...

Как через "IF" сделать чтобы программа закрывалась после ввода неверного значения
Как через &quot;If&quot; Зделать что бы когда ты вводишь не верное значение выполнялося...

Как сделать так, чтобы scanf в переменную double мог считывать с клавиатуры не только "0,01", но и "0.01"
Помогите!) Не знаю, искал, не нашел, возможно ли вообще. Чтобы и так и так...

11
Hikari
Хитрая блондиночка $)
1451 / 963 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
06.12.2016, 21:19 2
С коленки
C++
1
2
3
for(int i=0;i<N;i++){
  if(s[i].predmet.find('*')!=string::npos) cout<<s[i].predmet<<endl;
}
Выведет всех, у кого в предмете найдется звездочка.
0
Apollo1222
1 / 1 / 2
Регистрация: 10.10.2016
Сообщений: 136
06.12.2016, 21:36  [ТС] 3
Hikari, Выводит все подряд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*ofstream outfile("lab_13.txt");
    for (int i = 0; i < N; i++)
    {
    outfile << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
    } */
    ifstream infile("lab_13.txt");
    for (int i = 0; i < N; i++)
    {
        infile >> st[i].name >> st[i].grupa>> st[i].mark >> st[i].predmet;
    }
    ofstream outfile("lab_13_.txt");
    for (int i = 0; i < N; i++)
    {
        if (st[i].predmet.find("*Фізика") != string::npos) cout << st[i].predmet << endl;
        outfile << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
    } 
}
0
Hikari
Хитрая блондиночка $)
1451 / 963 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
06.12.2016, 21:44 4
Цитата Сообщение от Apollo1222 Посмотреть сообщение
Выводит все подряд
Куда? В файл или на экран?
На экран должно выводить только отобранное.
0
shvyrevvg
534 / 505 / 257
Регистрация: 12.05.2016
Сообщений: 1,469
07.12.2016, 07:48 5
C
1
2
if (strstr(st[i].predmet, "*Фізика"))
    puts(st[i].predmet);
1
Apollo1222
1 / 1 / 2
Регистрация: 10.10.2016
Сообщений: 136
07.12.2016, 10:49  [ТС] 6
мне надо чтобы в файл выводило

Добавлено через 8 минут
Hikari, мне надо чтобы в файл выводило

Добавлено через 12 часов 41 минуту
Hikari, что делает функция string::npos?
Цитата Сообщение от Hikari Посмотреть сообщение
if(s[i].predmet.find('*')!=string::npos)
C++
1
if(s[i].predmet.find('*')!=string::npos)
Добавлено через 10 минут
как сделать чтобы, если желающих больше 10, то отобрать тех студентов, у которых более высокий средний балл?
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
07.12.2016, 18:24 7
std::string
Добавие в массив, отсортируйте его и ввводите нужное количество записей
0
Apollo1222
1 / 1 / 2
Регистрация: 10.10.2016
Сообщений: 136
13.12.2016, 21:24  [ТС] 8
Apostol584, я не понимаю как это реализовать в коде
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
13.12.2016, 23:50 9
Лучший ответ Сообщение было отмечено Apollo1222 как решение

Решение

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
#include <iostream>
#include <iomanip>  
#include <fstream>
#include <string>
 
using namespace std;
 
const int N = 15;
 
struct student
{
    string name, grupa;
    float mark;
    string predmet;
};
 
int main(void)
{
    
   student st[N] = { 
        "Петренко", "1Пі", 5.00 ,"Фізика, Математика, Програмування, Хімія, Історія" ,
        "Дмитрук ","2Пі", 4.80 , "*Фізика, Математика, Програмування, Хімія, Історія" , 
        "Соменко ","2Пі", 3.90 , "Фізика, Математика, *Програмування, Хімія, Історія" ,
        "Тарасюк ","1Кі", 4.00 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Змійчук ","1Кн", 4.62 , "Фізика, *Математика, Програмування, *Хімія, Історія" ,
        "Панчук  ","1Пі",  3.49 , "Фізика, Математика, Програмування, Хімія, *Історія" ,
        "Рибчук  ","2Кн",  4.68 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Тимчук  ","1Кі",  5.00 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Кметюк  ","1Уб",  4.99 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Іванюк  ","3Кн",   3.20 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Кравчук ","2Кі",  4.40 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Петелько","1Уб", 4.73 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Івасюк  ","1Пі",   3.18 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Климчук ","1Кн",  4.72 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Овчарук ","2Кі",  3.33 , "Фізика, *Математика, Програмування, Хімія, Історія"  
   };
    
    cout << fixed << setprecision(2); 
    int k = 0;
    for (int i = 0; i < N; i++){
        if(st[i].predmet.find("*") != string::npos)
            cout << ++k << '\t' << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark<< '\t' << st[i].predmet << endl;
    } 
    
    int i,j;//begin sort
    for(i = 1; i < N; i++){
        student tmp = st[i];
        for (j = i - 1; j >= 0 && st[j].mark < tmp.mark; j--)
            st[j + 1] = st[j];
        st[j + 1] = tmp;    
    }
    //end sort
    
    cout << "****************\n";
    k = 0;
    for (int i = 0; i < N && i <= 10; i++){
        if(st[i].predmet.find("*") != string::npos)
            cout << ++k << '\t' << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark<< '\t' << st[i].predmet << endl;
    }
    
}
1
Apollo1222
1 / 1 / 2
Регистрация: 10.10.2016
Сообщений: 136
14.12.2016, 10:03  [ТС] 10
Apostol584, спасибо большое, программа работает отлично! Но немного не понимаю два последних цикла, объясните их пошагово, пожалуйста

Добавлено через 22 минуты
Apostol584, я правильно под файлы переделал?
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
const int N = 15;
 
struct student
{
    string name, grupa;
    double mark;
    string predmet;
}st[N] = { "Петренко", "1Пі", 4.00 ,"Фізика, Математика, *Програмування, Хімія, Історія" ,
"Дмитрук  ","2Пі", 4.80 , "Фізика, Математика, Програмування, *Хімія, Історія" , 
"Соменко  ","2Пі", 4.90 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Тарасюк  ","1Кі", 4.00 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Змійчук ","1Кн", 4.62 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Панчук   ","1Пі",  4.49 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Рибчук   ","2Кн",  3.68 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
"Тимчук  ","1Кі",  5.00 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Кметюк  ","1Уб",  4.99 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Іванюк   ","3Кн",   4.20 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Кравчук ","2Кі",  4.40 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Петелько","1Уб", 4.73 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Івасюк   ","1Пі",   4.18 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Климчук ","1Кн",  4.72 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
"Овчарук ","2Кі",  3.33 , "*Фізика, Математика, Програмування, Хімія, Історія" , };
int main(void)
{
    ofstream outfile("lab_13.txt");
    for (int i = 0; i < N; i++)
    {
    outfile << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
    } 
    ifstream infile("lab_13.txt");
    for (int i = 0; i < N; i++)
    {
        infile >> st[i].name >> st[i].grupa>> st[i].mark >> st[i].predmet;
    }
    ofstream fout("lab_13_.txt");
     int i,j; 
    for(i = 1; i < N; i++){
        student tmp = st[i];
        for (j = i - 1; j >= 0 && st[j].mark < tmp.mark; j--)
            st[j + 1] = st[j];
        st[j + 1] = tmp;    
    }
    
   int k = 0;
    for (int i = 0; i < N && i <= 10; i++){
          if (st[i].predmet.find("*Фізика") != string::npos)
        fout << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
    }
    }
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
14.12.2016, 10:38 11
Строки 42-49 сортировка массива во значению оценки, используется алгоритм сортировки вставками.
51-55 вывод подходящих значений с ограничением не более 10, но с ошибкой.
C++
1
2
3
4
5
6
7
8
int k = 0;
for (int i = 0; i < N && k < 10; i++){
    if (st[i].predmet.find("*Фізика") != string::npos){
        fout << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
        k++;
        }
    }
}
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
15.12.2016, 14:13 12
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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
const int N = 15;
 
struct student
{
    string name, grupa;
    double mark;
    string predmet;
};
 
int main(void)
{
 
    student st[N] = {
        "Петренко", "1Пі", 5.00 ,"Фізика, Математика, Програмування, Хімія, Історія" ,
        "Дмитрук ","2Пі", 4.80 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Соменко ","2Пі", 3.90 , "Фізика, Математика, *Програмування, Хімія, Історія" ,
        "Тарасюк ","1Кі", 4.00 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Змійчук ","1Кн", 4.62 , "Фізика, *Математика, Програмування, *Хімія, Історія" ,
        "Панчук  ","1Пі",  3.49 , "Фізика, Математика, Програмування, Хімія, *Історія" ,
        "Рибчук  ","2Кн",  4.68 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Тимчук  ","1Кі",  5.00 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Кметюк  ","1Уб",  4.99 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Іванюк  ","3Кн",   3.20 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Кравчук ","2Кі",  4.40 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Петелько","1Уб", 4.73 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Івасюк  ","1Пі",   3.18 , "Фізика, *Математика, Програмування, Хімія, Історія" ,
        "Климчук ","1Кн",  4.72 , "*Фізика, Математика, Програмування, Хімія, Історія" ,
        "Овчарук ","2Кі",  3.33 , "Фізика, *Математика, Програмування, Хімія, Історія"
    };
 
    ofstream outfile("lab_13.txt");
    if (!outfile.is_open()) {
        exit(0);
    }
    for (int i = 0; i < N; i++)
    {
        outfile << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
    }
    outfile.close();
 
    ifstream infile("lab_13.txt");
    if (!infile.is_open()) {
        exit(0);
    }
    for (int i = 0; i < N; i++)
    {
        infile >> st[i].name >> st[i].grupa >> st[i].mark;
        getline(infile, st[i].predmet);
        st[i].predmet.erase(0, 1);
    }
    infile.close();
 
    outfile.open("lab_1.txt");
    if (!outfile.is_open()) {
        exit(0);
    }
 
    int i, j;
    for (i = 1; i < N; i++) {
        student tmp = st[i];
        for (j = i - 1; j >= 0 && st[j].mark < tmp.mark; j--)
            st[j + 1] = st[j];
        st[j + 1] = tmp;
    }
 
    int k = 0;
    for (int i = 0; i < N && k < 10; i++) {
        if (st[i].predmet.find("*Фізика") != string::npos) {
            outfile << st[i].name << '\t' << st[i].grupa << '\t' << st[i].mark << '\t' << st[i].predmet << endl;
            k++;
        }
    }
    outfile.close();
}
1
15.12.2016, 14:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2016, 14:13

Из данной строки сделать новую строку, заменив в ней все слова: "один", "два", "три" и т.д на соответствующие цифры
Из данной строки сделать новую строку, заменив в ней все слова: &quot;один&quot;, &quot;два&quot;,...

Как сделать, так чтобы программа выводила наименование цвета, как здесь?
http://colors.aeio.ru/color/fffffe Я создал базу из 1002 цветов но это вообще...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
Сабж g++ 4.5.0


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

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

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