@QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
|
11.08.2014, 04:52
|
|

Сообщение от _20_
Также прошу подсказать, как реализовать такую конструкцию символов(буфер? поток?), из который можно было бы читать словами (>>), но при этом каждое следующие читание читало бы следующее слово.
Вот например:
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| #include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
class WordReader {
private:
ifstream& stream;
vector<string> buffer;
public:
WordReader(ifstream& stream) : stream(stream) {}
//Функция разделяет строку на части с помощью разделителей (delimiters)
static vector<string> split(string data, string delimiters) {
vector<string> parts;
auto lastPos = data.find_first_not_of(delimiters, 0);
auto pos = data.find_first_of(delimiters, lastPos);
while (pos != string::npos || lastPos != string::npos) {
parts.push_back(data.substr(lastPos, pos - lastPos));
lastPos = data.find_first_not_of(delimiters, pos);
pos = data.find_first_of(delimiters, lastPos);
}
return parts;
}
//Проверка на существование следущего слова в файле
bool hasNext() {
return stream.eof() ? !buffer.empty() : true;
}
//Оператор считывания
WordReader& operator>>(string& word) {
if (hasNext()) {
if (buffer.empty()) {
string line;
getline(stream, line);
buffer = split(line, " ");
}
if(buffer.size() > 0) {
word = buffer[0];
buffer.erase(buffer.begin());
}
else word = "";
}
else word = "";
return *this;
}
};
void main() {
ifstream file("D:\\text.txt");
WordReader reader(file);
while (reader.hasNext()) {
string buf;
reader >> buf;
cout << buf << endl;;
}
getchar();
} |
|
Добавлено через 2 минуты

Сообщение от _20_
Необходимо посчитать количество столбцов в строке, разделённых произвольным количеством белых знаков (кроме знака конца стоки).
Вообще не понял о чем речь. Столбцы в строке? Белые знаки? Пробелы имеются в виду?
1
|