Поиск знаков препинания в тексте

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Mojiback
Сообщения: 4
Зарегистрирован: 20 дек 2017, 16:42

Поиск знаков препинания в тексте

Сообщение Mojiback » 02 янв 2018, 14:28

Всем доброго времени суток и с наступившим, форумчане! При считывании текста из файла, не ставятся знаки абзацев, и как итог - все пишется в строку. Смотрится не очень красиво, решил добавлять endl после каждой точки. Но вот вопрос, как найти эту самую точку? Пытался через функцию find, но ничего хорошего не вышло. Выручайте :)
Прилагаю код:

Код: Выделить всё

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
	setlocale(0, "");
	ifstream file("Line.txt");
	if (!file)
	{
		float clo;
		cout << "Ошибка открытия файла! Для продолжения нажмите любую клавишу...";
		cin >> clo;
		return 1;
	}

	int i = 0;
	static char buff[1024][1024];
	while (!file.eof()) 
	{
		file >> buff[i];
		cout << buff[i] << " ";
		++i;
	}
		file.close();
	system("pause > 1");
	return 0;
}
P.S. Считывал по словам, а не через getline, т.к. требуется работа с каждым словом.
P.S.S. И еще вопрос - как записать результат в выходной файл, при этом имя файла должен задать пользователь?

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Re: Поиск знаков препинания в тексте

Сообщение Romeo » 02 янв 2018, 17:21

- Нерациональное использование памяти. Большинство слов не превышают размер 10 символов. Ты же выделяешь под каждое слово 1024 байт. Таким образом большая часть зарезервированной памяти будет оставаться неиспользованной. Если нужно держать в памяти весь текст, просто возьми размер файла, добавь 1 терминирующего нуля, динамически выдели массив такого размера и одним обращением вычитай всё содержимое файла в него.

- Если уж на то пошло, не понятно вообще зачем держать в памяти весь текст. Судя по тому, что ты его просто хочешь как-то обработать и потом сохранить в новый файл, достаточно итеративного построчного вычитывания-обработки-сохранения. Это ещё уменьшит расход памяти.

- Найти запятую можно либо циклом по символам слова, либо с помощью std::find. Если пробовал, но ничего не получилось, то нужны подробности, что именно не получилось.

- Записать в файл можно с помощью ofstream. Работа с ним один в один, как с ifstream, который у тебя уже есть в коде.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Ответить