Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2023, 17:08   #1
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию Перенесите в новый файл все строки, содержащие заданное слово.

Помогите, с чего начать Нужно написать программу на С++. Вот условие: "Дан текстовый файл. Перенесите в новый файл все строки, содержащие заданное слово." Знаю, что нужно подключить библиотеки ifstream, ofstream, но как это сделать? Читала литературу, но не пойму как это подключить другой файл, как это сделать? Где нужно сохранять файл с текстом и откуда его брать, где он должен храниться?

Последний раз редактировалось lenaiv; 29.03.2023 в 17:13.
lenaiv вне форума Ответить с цитированием
Старый 29.03.2023, 17:23   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Цитата:
Сообщение от lenaiv Посмотреть сообщение
Где нужно сохранять файл с текстом и откуда его брать, где он должен храниться?
Ну и вопросец... Да откуда кто может это знать ? На флешке, на DWD, на том же компе, где будет и сама программа. Даже на перфоленте
digitalis вне форума Ответить с цитированием
Старый 29.03.2023, 17:36   #3
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Ну и вопросец... Да откуда кто может это знать ? На флешке, на DWD, на том же компе, где будет и сама программа. Даже на перфоленте
как к нему указать путь, я файл сохраняю на рабочем столе, а она его пропускаят, не видит
lenaiv вне форума Ответить с цитированием
Старый 29.03.2023, 18:12   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

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

Код:
#include <iostream>
#include <fstream>
#include <strings.h>

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;
}
Вот вам программа, которая делает требуемую работу. Сохраняете нужные строки в файле "INPUT.TXT" рядом с exe файлом программы и после запуска получите рядом же с файлом exe файл с именем OUTPUT.TXT содержащий все строки из файла INPUT.TXT со словом 'word' (не совсем словом, а частью строки содержащей слово word пускай и в рамках более длинного слова).

Последний раз редактировалось macomics; 29.03.2023 в 19:44.
macomics вне форума Ответить с цитированием
Старый 29.03.2023, 18:15   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Сохраняйте файл там же, где запускаете exe, или в папке с проектом, если запускаете из среды.
Arigato вне форума Ответить с цитированием
Старый 30.03.2023, 14:37   #6
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

[QUOTE=macomics;1858816]А программа у вас тоже на рабочем столе или все же в отдельной папке?
Да и вам надо подключать файл из библиотеки, а не вашу самодеятельность. Поэтому этот файл будет находиться в недрах исходных текстов при компиляторе.

Код:
#include <iostream>
#include <fstream>
#include <strings.h>

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;
}
Вот вам программа, которая делает требуемую работу. Сохраняете нужные строки в файле "INPUT.TXT" рядом с exe файлом программы и после запуска получите рядом же с файлом exe файл с именем OUTPUT.TXT содержащий все строки из файла INPUT.TXT со словом 'word' (не совсем словом, а частью строки содержащей слово word пускай и в рамках более длинного слова).[/QU

ничего не переписывает в новый файл почему
lenaiv вне форума Ответить с цитированием
Старый 30.03.2023, 15:06   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

А он вообще открыл файл? Можно же вывести сообщения:

Код:
if (ifile.is_open()) {
  ...
} else {
  std::cout << "File not found." << std::endl;
}
Arigato вне форума Ответить с цитированием
Старый 30.03.2023, 15:31   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Можно же вывести сообщения:
Если файл не откроет, то и OUTPUT.TXT не появится.
macomics вне форума Ответить с цитированием
Старый 30.03.2023, 18:48   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Так может у него пустой аутпут.тхт там уже лежит. Так хоть ясно будет, что инпут.тхт не открылся.
Arigato вне форума Ответить с цитированием
Старый 30.03.2023, 20:55   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Логично

Код:
#include <iostream>
#include <fstream>
#include <strings.h>

void ifileProceed(std::ifstream &ifile, std::ostream &ofile, std::string word, int wlen) {
    std::string str;
    while (!ifile.eof()) {
        int 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;
            }
    }
}

int main(int argc, char *argv[]) {
    std::ifstream ifile("INPUT.TXT");
    if (ifile.is_open()) {
        std::string word;
        std::ofstream ofile("OUTPUT.TXT");
        if (argc > 1) { word = argv[1]; } else { std::cin >> word; }
        int wlen = word.length();
        if (ofile.is_open()) {
            ifileProceed(ifile, ofile, word, wlen);
            ofile.close();
        } else {
            std::cout << "Файл OUTPUT.TXT не может быть заполнен!" << std::endl;
            ifileProceed(ifile, std::cout, word, wlen);
        }
        ifile.close();
    } else {
        std::cout << "Файл INPUT.TXT не обработан!" << std::endl;
    }
    return 0;
}

Последний раз редактировалось macomics; 30.03.2023 в 21:08.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заменить заданное слово в строке на другое заданное слово. ChestIotVaga Помощь студентам 4 23.02.2023 13:08
Дан двумерный массив размером n*m, заполненный случайными числами из заданного пользователем промежутка. Удвоить все строки и столбцы, содержащие ноль, вывести результат на экран и в файл. Sashka0089 Помощь студентам 1 12.05.2021 04:49
[Си] В массиве строк найти все слова, содержащие заданное количество гласных букв Maik512 Помощь студентам 2 20.12.2016 13:20
Работа со строками C++: удалить строки, содержащие определенное слово Alex_almaz C++ Builder 1 08.04.2014 10:05
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово (С++) Lapochka Помощь студентам 6 01.12.2011 14:05