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

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

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

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

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

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

Мне нужно именно такой структурой сделать программу, знаю у меня ошибка, по-моему в if, а как исправить не знаю. Подскажите. Файл f1 у меня видит, а f2 остается пустой после работы.

Код:
/*Пусть дан текстовый файл. 
Перенесите в новый файл все строки, содержащие заданное слово. */


#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;
}
lenaiv вне форума Ответить с цитированием
Старый 30.03.2023, 16:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

А где вы хоть что-то присваиваете sovpadenie? Что вы собираетесь найти в пустой строке?
p51x вне форума Ответить с цитированием
Старый 30.03.2023, 16:37   #3
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

в литературе я нашла по теории работы с++ , а как нужно сделать? Это же не число, в которое мы полагаем. Со строкой в файл впервые делаю задачу. Мне только сказали, что структура открытия и записи должна быть как, а остальное я сама ищу.
lenaiv вне форума Ответить с цитированием
Старый 30.03.2023, 17:10   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

У вас в while вместо slovo должно быть написано sovpadenie и два одинаковых вложенных if не нужно.
Код:
	while (getline(f1, sovpadenie))
	{
		if (sovpadenie.find(slovo) != string::npos)
			f2 << sovpadenie << endl;
	}
macomics вне форума Ответить с цитированием
Старый 30.03.2023, 17:13   #5
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

Исправила, даже написала еще код, но ничего не изменилось

Код:
#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;
}
другой код

Код:
#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;
}
lenaiv вне форума Ответить с цитированием
Старый 30.03.2023, 17:27   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
	setlocale(LC_ALL, "Russian");
	string slovo, sovpadenie;
	int pos, vozv/* = slovo.length()*/; // значение в переменной slovo ещё не введено
	ifstream f1;  
	ofstream f2; 
	f1.open("C:\\Users\\Я\\source\\repos\\f1.txt"); 
	if (!f1.is_open())
	{
		cout << "Файл f1 не открывается\n";
		return 1;
	}
	f2.open("C:\\Users\\Я\\source\\repos\\f2.txt"); 
	if (!f2.is_open())
	{
		cout << "Файл f2 не открывается\n";
		return 1;
	}
	cout << "Введите заданное слово: \n";
	cin >> slovo;
	vozv = slovo.length(); // А вот тут значение slovo уже задано и можно узнать его длину
	while (!f1.eof()) 
	{
		pos = -1;
// Вот тут вы стирали значение из переменной slovo (искомое) перезаписывая его строкой из файла. Надо использовать переменную sovpadenie, а не slovo.
		getline(f1, sovpadenie); 
// Аналогично в следующих строках
		while ((pos = sovpadenie.find(slovo, pos + 1)) != string::npos)
			if ((pos == 0 || sovpadenie[pos - 1] == ' ') && (pos + vozv >= sovpadenie.length() - 1 || sovpadenie[pos + vozv] == ' '))
			{
				f2 << sovpadenie << endl;
				break;
			}
	}
	f2.close();
	f1.close();
	return 0;
}
macomics вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставить в строке перед заданным словом другое заданное слово Mayrlly Помощь студентам 1 28.04.2020 13:54
Простая программа: вывести из БД записи, содержащие слова, совпадающие с заданным словом Vika2016 PHP 8 15.12.2016 17:47
Вставить заданное слово в строку перед заданным словом Blind Guard Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 07.04.2014 19:56
Скопировать из файла F1 в файл F2 все строки, в которых нет слов, совпадающих с первым словом. Rudichekkk Помощь студентам 2 05.12.2013 00:14
Вставить в строке перед заданным словом другое заданное слово. Axrik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 23.04.2013 02:42