@dearname

Как передвигаться посимвольно в файле?

Добрый вечер. Столкнулся с такой проблемой, вот написал кусок кода, который должен выводить на экран все слова. В данном случае мой файл имеет такое содержание: "hello world privet!" . В консоли выводится, только Hello и World - слова privet! - нету. В чем проблема, подскажите пожалуйста.
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <vector>

using namespace std;

struct Lexeme {	
	int start, end;
	string lexeme;
};

void gToken(ifstream &fin, vector<Lexeme> &v);


int main()
{
	char filename[30];
	ifstream fin;
	char q;

	//cin >> filename;
	fin.open("text.txt");
	//wToken();
	
	vector<Lexeme> v;
	gToken(fin, v);
	fin.close();
	system("PAUSE");
	return EXIT_SUCCESS;

}

void gToken(ifstream &fin, vector<Lexeme> &v)
{
	char ch;
	Lexeme l;
	while (fin >> ch) 
	{
		l.lexeme += ch;
		while (fin.get(ch))
		{
		if (ch != ' ' && ch != '\n')
		{
			l.lexeme+=ch;
		}
		else
		{
			cout << l.lexeme << endl;
			l.lexeme = " ";
			break;
		}
		}
		v.push_back(l);
	}
}
  • Вопрос задан
  • 2401 просмотр
Пригласить эксперта
Ответы на вопрос 1
Привет,

Не учтено, что слово может завершаться концом файла. Должно быть что-то вроде этого:
void gToken(std::ifstream &fin, std::vector<Lexeme> &v)
{
	char ch = 0x00;
	Lexeme l = { 0 };

	while (!fin.eof())
	{
		ch = fin.get();

		if (!isspace(ch) && !fin.eof())
			l.lexeme += ch;
		else if (!l.lexeme.empty())
		{		
			v.push_back(l);
			l.lexeme.clear();
		}
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы