читать всю строку с разными столбцами - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть такой текстовый файл:

1 2 3
4
5 6 7 8
just with money we can live
2 5

с этим фрагментом кода, я могу показать его целиком на экране, но не могу поместить его в строку, и его компиляция выдает ошибку:

string test ="";
string line2;

freopen("a.txt", "rb", stdin);
   while(getline(cin, line2)) {
       cout << line2 << endl;
       line2 >> test;
} 

1- Можно ли поместить весь текстовый файл в «тест»?
2- и вместо использования чего-то вроде этого:

string test =
"1 2 3"
"4"
"5 6 7 8"
"just with money we can live"
"2 5";

возможно лииспользовать цикл и freopen или что-то вроде этого?

Я прочитал это " Чтение файла построчно, используя ifstream в C ++ ", но это для идентичного номера столбца.

Если есть сайт, где можно ответить на мой вопрос, пожалуйста, дайте его мне.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Поместить содержимое файла в std::string тривиально:

std::string test{std::istreambuf_iterator<char>{std::ifstream{"a.txt"}.rdbuf()},
                 std::istreambuf_iterator<char>{}};
0 голосов
/ 10 ноября 2019

Давайте посмотрим на этот фрагмент:

string test ="";
string line2;

freopen("a.txt", "rb", stdin);
while(getline(cin, line2)) {
       cout << line2 << endl;
}

Здесь происходит то, что вы перенаправляете текстовый файл (не совсем точная терминология) в стандартный поток ввода (представленный какcin здесь), и вы читаете его построчно. Затем, прочитав каждую строку, вы печатаете ее в стандартный поток вывода, используя объект cout.

Что нужно сделать, чтобы прочитать файл в строку, это что-то вроде строки:

string test ="";
string line2;

freopen("a.txt", "rb", stdin);
while(getline(cin, line2)) {
       test += line2 + "\n";
}

Здесь вы просто добавляете строки к test. Обратите внимание, что вам также нужно добавить новые строки, так как getline удаляет их.

...