Чтобы прочитать (и сохранить) и неизвестное количество пробельных строк, вам необходимо хранилище для каждой строки. Самый простой способ предоставить хранилище гибким способом, который можно добавлять в неограниченном количестве (вплоть до предела используемой памяти), заключается в векторе строк . Строка обеспечивает хранение каждой строки, а векторный контейнер обеспечивает простой способ собрать любое количество строк вместе.
Ваш вектор строк (vs
) может быть объявлен как:
#include <iostream>
#include <string>
#include <vector>
...
std::vector<std::string>vs {};
std :: vector предоставляет функцию-член .push_back()
для добавления элемента (в данном случае string
) в вектор, например
std::vector<std::string>vs {};
std::string s;
while (std::cin >> s)
vs.push_back(s);
, который просточитает строку s
до тех пор, пока не встретится EOF
, и каждая прочитанная строка будет добавлена к вектору строк, используя vs.push_back(s);
.
Если поместить его в целом, вы можете сделать:
#include <iostream>
#include <string>
#include <vector>
int main (void) {
std::vector<std::string>vs {};
std::string s;
while (std::cin >> s) /* read each string into s */
vs.push_back(s); /* add s to vector of strings */
for (auto& w : vs) /* output each word using range-based loop */
std::cout << w << "\n";
}
Пример использования / вывода
$ echo "my dog has fleas" | ./bin/readcintostrings
my
dog
has
fleas
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.