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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2015, 12:57   #1
Uefa
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 59
По умолчанию (C++) Чтение из файла пословно

Здравствуйте! Возникла проблема с чтением из файла пословно. Необходимо считать текстовый файл пословно и каждое слово добавить в контейнер без знаков препинания (добавить "Привет", вместо "Привет!").
Код:
void Load2 (list<string>*l)
{
	ifstream f;  
	f.open("text.txt");
	string ch;
	if(f == NULL)
	{
		perror("");
		exit(1);
	}

	//while (!f.eof())
	for (int i=0; i<30; i++)
	{
		f >> ch;
		cout << ch << " ";
		l->push_back(ch);
	}
	f.close();
}
В представленном выше случае файл читается пословно, но со знаками препинания. Следовательно нужно считывать файл посимвольно и из символов составлять слова. Если тип переменной ch установить char вместо string, будет считываться посимвольно и можно проверкой отбрасывать знаки препинания, но как в таком случае учитывать пробелы, чтобы получать слова из символов? Проверка if (ch != ' ') пробелы не находит и получается просто набор букв без пробелов и знаков препинания. Как решить данную проблему?

Последний раз редактировалось Uefa; 18.06.2015 в 13:00.
Uefa вне форума Ответить с цитированием
Старый 18.06.2015, 13:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В качестве идеи:
Код:
	for (int i=0; i<30; i++)
	{
		f >> ch;
                while 
                      (ch[ch.length()]<'A' || ch[ch.length()]>'Z')
                   || (ch[ch.length()]<'A' || ch[ch.length()]>'Я')
                   || (ch[ch.length()]<'0' || ch[ch.length()]>'9')
                     ch.pop_back();
		cout << ch << " ";
		l->push_back(ch);
	}
	f.close();
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2015, 13:41   #3
Uefa
Пользователь
 
Регистрация: 25.08.2013
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В качестве идеи:
Код:
	for (int i=0; i<30; i++)
	{
		f >> ch;
                while 
                      (ch[ch.length()]<'A' || ch[ch.length()]>'Z')
                   || (ch[ch.length()]<'A' || ch[ch.length()]>'Я')
                   || (ch[ch.length()]<'0' || ch[ch.length()]>'9')
                     ch.pop_back();
		cout << ch << " ";
		l->push_back(ch);
	}
	f.close();
у меня почему-то в string отсутствует метод pop_back...
Uefa вне форума Ответить с цитированием
Старый 18.06.2015, 13:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тогда
Код:
for(i=ch.length()-1;
 i &&
     (ch[i]<'A' || ch[i]>'Z')
 || (ch[i]<'A' || ch[i]>'Я')
 || (ch[i]<'0' || ch[i]>'9')
;i--) ch.erase(i,1);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла brunis Паскаль, Turbo Pascal, PascalABC.NET 6 11.08.2012 12:59
Чтение XM файла IvanSCM Свободное общение 1 08.11.2011 18:27
Чтение файла C++; Rudeboy Помощь студентам 2 08.06.2010 13:23
Чтение из файла (С) spirit_trapper Помощь студентам 4 26.05.2010 19:37
Чтение из файла pautina Общие вопросы Delphi 8 23.01.2009 15:48