С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140

Вывод в файл строк содержащих указанное слово

29.03.2023, 17:25. Показов 1801. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, с чего начать Нужно написать программу на С++. Вот условие: "Дан текстовый файл. Перенесите в новый файл все строки, содержащие заданное слово." Знаю, что нужно подключить библиотеки ifstream, ofstream, но как это сделать? Читала литературу, но не пойму как это подключить другой файл, как это сделать? Где нужно сохранять файл с текстом и откуда его брать, где он должен храниться?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2023, 17:25
Ответы с готовыми решениями:

Вывод строк,содержащих нужное слово
Суть такова Нужно из текстового файла (belarus) вывести все строки содержащие слово belarus Сначала я весь текстовый файл вывожу в...

Вывод всех строк,содержащих введенное слово
У меня есть форма и на ней есть 2 текстбокса. В один я ввожу строку для поиска,а во вторую выводится сообщение о содержании данной строки в...

Дан текстовый файл A.TXT. Сформировать новый файл из строк файла A.TXT, содержащих слово RUN
Дан текстовый файл A.TXT. Сформировать новый файл из строк файла A.TXT, содержащих слово RUN. Помогите пожалуйста. Очень срочно!!!

31
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.03.2023, 18:48
Ну выбери любую папку, положи туда файл, и туда же сохраняй новый. Чему вас там учат вообще?
0
Заблокирован
29.03.2023, 20:50
Цитата Сообщение от elenaiv0101 Посмотреть сообщение
Перенесите в новый файл все строки
Старый файл должен стать пустым, раз мы перенесем все строки в новый ?
0
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
29.03.2023, 23:11  [ТС]
Не реагирует не на один файл, создала файл и в папке, где запускающий файл, и в папке, где находится папка с файлами программы.

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
#include <iostream>
#include <fstream>
#include <string>
 
int main(int n, char* a[])
{
    setlocale(LC_ALL, "Russian");
    std::string str, slovo;
    if (n > 1) 
    {
        slovo = a[1];
    }
    else { std::cin >> slovo;
    }
    int pos, wlen = slovo.length();
    std::ifstream ifile("INPUT.TXT");
    if (ifile.is_open()) 
    {
        std::ofstream ofile("OUTPUT.TXT");
        if (ofile.is_open()) 
        {
            while (!ifile.eof()) 
            {
                pos = -1;
                std::getline(ifile, str);
                while ((pos = str.find(slovo, pos + 1)) != std::string::npos)
                    if ((pos == 0 || str[pos - 1] == ' ')
                        && (pos + wlen >= str.length() - 1
                            || str[pos + wlen] == ' ')) 
                    {
                        ofile << str << std::endl;
                        break;
                    }
            }
            ofile.close();
        }
        ifile.close();
    }
    return 0;
}
и так пробовала

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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    ifstream in("INPUT");
    ofstream out("OUTPUT");
    string line;
    string match;
 
    cout << "Введите заданное слово: \n";
    cin >> match;
 
    while (getline(in, line))
    {
        if (line.find(match) != string::npos)
            out << line << '\n';
    }
    return 0;
}
Подскажите, где ошибка.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
29.03.2023, 23:39
SmallEvil, скорее всего нет. Скорее всего надо скопировать строки.
elenaiv0101,
Проверьте результаты выводом на экран, возможно у вас string::find не находит ничего. Если это так, то попробуйте сменить кодировку входного файла на utf-8, мне это помогло.
in и out укажите полными путями.
0
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 00:09  [ТС]
Еще один вариант программы, не идет, выдает, что файл не открывается, уже путь указала. Помогите написать правильно программу.

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
#include <string>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main() 
{
    setlocale(LC_ALL, "Russian");
    string slovo;
    string sovpadenie;
    ifstream f1;
    ofstream f2;
    f1.open("C:\Users\Я\source\repos\f1.txt");
    if (!f1)
    {
        cout << "Файл не открывается\n";
        return 1;
    }
    f2.open("C:\Users\Я\source\repos\f2.txt");
 
 
    cout << "Введите заданное слово: \n";
    cin >> slovo;
 
    while (getline(f1, slovo))
    {
        if (slovo.find(sovpadenie) != string::npos)
            f2 << slovo << '\n';
    }
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.03.2023, 01:08
Слэш удваивай в пути.
1
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 10:12  [ТС]
объясните часть программы по шагам, что обозначает каждая строка


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    ifstream in("file1");
    ofstream out("file2");
    string line;
    string match;
 
    cout << "Enter word to match in line:\n";
    cin >> match;
 
    while (getline(in, line))
    {
        if (line.find(match) != string::npos)
            out << line << '\n';
    }
0
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 10:17  [ТС]
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
int main(int argc, char *argv[]) {
    std::string str, word;
    if (argc > 1) { word = argv[1]; } else { std::cin >> word; }
    int pos, wlen = word.length();
    std::ifstream ifile("INPUT.TXT");
    if (ifile.is_open()) {
        std::ofstream ofile("OUTPUT.TXT");
        if (ofile.is_open()) {
            while (!ifile.eof()) {
                pos = -1;
                std::getline(ifile, str);
                while ((pos = str.find(word, pos + 1)) != std::string::npos)
                    if ((pos == 0 || str[pos - 1] == ' ')
                    && (pos + wlen >= str.length() - 1
                    || str[pos + wlen] == ' ')) {
                        ofile << str << std::endl;
                        break;
                    }
            }
            ofile.close();
        }
        ifile.close();
    }
    return 0;
}
0
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 16:32  [ТС]
Мне нужно именно такой структурой сделать программу, знаю у меня ошибка, по-моему в if, а как исправить не знаю. Подскажите. Файл f1 у меня видит, а f2 остается пустой после работы.
Вот условие "Задан текстовый файл. Перенесите в новый файл все строки, содержащие заданное слово."

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
#include <string>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string slovo;
    string sovpadenie;
    ifstream f1;  
    ofstream f2; 
    f1.open("C:\\Users\\Я\\source\\repos\\f1.txt"); 
    if (!f1)
    {
        cout << "Файл не открывается\n";
        return 1;
    }
    f2.open("C:\\Users\\Я\\source\\repos\\f2.txt"); 
 
    cout << "Введите заданное слово: \n";
    cin >> slovo;
 
    while (getline(f1, slovo))
    {
        if (sovpadenie.find(slovo) != string::npos)
            if (sovpadenie.find(slovo) != string::npos)
                f2 << sovpadenie << endl;
    }
    f2.close(); // закрываем файл
    return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
30.03.2023, 16:46
Цитата Сообщение от elenaiv0101 Посмотреть сообщение
while (getline(f1, slovo))
C++
1
while (getline(f1, sovpadenie))
и второй if лишний
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
30.03.2023, 16:46
Цитата Сообщение от elenaiv0101 Посмотреть сообщение
cout << "Введите заданное слово: \n";
cin >> slovo;
while (getline(f1, slovo))
Не в ту переемнную getline
1
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 17:09  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Слэш удваивай в пути.

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
#include <string>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string slovo;
    string sovpadenie;
    ifstream f1;  
    ofstream f2; 
    f1.open("C:\\Users\\Я\\source\\repos\\f1.txt"); 
    if (!f1)
    {
        cout << "Файл не открывается\n";
        return 1;
    }
    f2.open("C:\\Users\\Я\\source\\repos\\f2.txt"); 
 
    cout << "Введите заданное слово: \n";
    cin >> slovo;
 
    while (getline(f1, sovpadenie))
    {
        if (sovpadenie.find(slovo) != string::npos)
                f2 << sovpadenie << endl;
    }
    f2.close(); 
    f1.close();
    return 0;
}
исправила, но ничего не изменилось
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.03.2023, 17:16
Что не изменилось? Программа что сообщает?
0
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 17:16  [ТС]
написала по-другому, но не пишет в f2

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
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    string slovo, sovpadenie;
    int pos, vozv = slovo.length();
    ifstream f1;  
    ofstream f2; 
    f1.open("C:\\Users\\Я\\source\\repos\\f1.txt"); 
    if (!f1)
    {
        cout << "Файл f1 не открывается\n";
        return 1;
    }
    f2.open("C:\\Users\\Я\\source\\repos\\f2.txt"); 
    if (!f2)
    {
        cout << "Файл f2 не открывается\n";
        return 1;
    }
    cout << "Введите заданное слово: \n";
    cin >> slovo;
    if (f1.is_open())
    {
    if (f2.is_open()) 
    {
    while (!f1.eof()) 
    {
        pos = -1;
        getline(f1, slovo);
        while ((pos = slovo.find(slovo, pos + 1)) != string::npos)
            if ((pos == 0 || slovo[pos - 1] == ' ') && (pos + vozv >= slovo.length() - 1 || slovo[pos + vozv] == ' '))
            {
                f2 << slovo << endl;
                break;
            }
    }
    f2.close();
    }
    f1.close();
    }
    return 0;
}
0
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 17:21  [ТС]
вот, что выходит
Миниатюры
Вывод в файл строк содержащих указанное слово  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.03.2023, 17:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    while (getline(f1, s)) 
    {
        pos = 0;
        while ((pos = s.find(slovo, pos)) != string::npos)
        {
            if ((pos == 0 || s[pos - 1] == ' ') && (pos + vozv == s.length() || s[pos + vozv] == ' '))
            {
                f2 << s << endl;
                break;
            }
            pos += vozv;
        }
    }
1
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
30.03.2023, 17:48
nmcf, этот код какой-то трудночитаемый.
Предлагаю сделать через stringstream
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <sstream>
...
    while (getline(f1, s)) 
    {
        istringstream SS(s);
        string t;
        while(SS>>t)
        {
            if(t==slovo)
            {       
                f2 << s << endl;
                break;
            }
        }
    }
1
0 / 0 / 0
Регистрация: 03.11.2022
Сообщений: 140
30.03.2023, 18:01  [ТС]
исправила

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
#include <string>
#include <fstream>
#include <iostream>
#include <sstream>
 
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    string slovo, sovpadenie;
    int pos, vozv = slovo.length();
    ifstream f1;  
    ofstream f2; 
    f1.open("C:\\Users\\Я\\source\\repos\\f1.txt"); 
    if (!f1)
    {
        cout << "Файл f1 не открывается\n";
        return 1;
    }
    f2.open("C:\\Users\\Я\\source\\repos\\f2.txt"); 
    if (!f2)
    {
        cout << "Файл f2 не открывается\n";
        return 1;
    }
    cout << "Введите заданное слово: \n";
    cin >> slovo;
    if (f1.is_open())
    {
    if (f2.is_open()) 
    {
        while (getline(f1, sovpadenie))
        {
            istringstream SS(sovpadenie);
            string t;
            while (SS >> t)
            {
                if (t == slovo)
                {
                    f2 << sovpadenie << endl;
                    break;
                }
            }
        }
    f2.close();
    }
    f1.close();
    }
    return 0;
}
это мои файлы f1 и f2, что получается
Миниатюры
Вывод в файл строк содержащих указанное слово  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.03.2023, 18:03
elenaiv0101, исправления сделаны?
И тестируй на английских словах для начала.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2023, 18:03
Помогаю со студенческими работами здесь

Из группы файлов, содержащих слово “apple” выбрать тот файл, который имеет наибольшее количество строк
Из группы файлов, содержащих слово “apple” выбрать тот файл, который имеет наибольшее количество строк. С использованием модуля DOS.

Определить количество строк файла, содержащих ровно одно слово и вывести строки, содержащих не более 5-ти символов
создать с помощью средств С++текстовый файл. Определить количество строк файла, содержащих ровно одно слово и вывести строки, содержащих не...

Текстовый файл: напечатать строки файла, содержащие указанное слово
Данн текстовый файл и слово, напечатать стоки Файлы , содержащие указанное слово

Поиск строк содержащих определенное слово
Доброго времени суток. Подскажите пожалуйста по такой проблеме. Есть документ Excel (несколько листов), необходимо написать макрос, который...

Дан текстовый файл. Напечатать строки файла, что содержат указанное слово
Дан текстовый файл. Напечатать строки файла, что содержат указанное слово. Помогите пожалуйста.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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 Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru