这是便宜的方法:
std::string in;
while (std::cin >> in)
std::cout << piglatin(in) << char(std::cin.get());
std::cin >> in
跳过输入流中的任何前导空格,然后用输入流中in
的下一个以空格结尾的单词填充,将空格结尾留在输入流中。char(std::cin.get())
然后提取该终止符(可能是空格或换行符)。while 循环由文件结尾终止。
只要你理解它,你就可以使用它。
添加:
这里有一个更好的方法来判断单词 read 是否以空格或换行符结尾:
#include <cctype>
char look_for_nl(std::istream& is) {
for (char d = is.get(); is; d = is.get()) {
if (d == '\n') return d;
if (!isspace(d)) {
is.putback(d);
return ' ';
}
}
// We got an eof and there was no NL character. We'll pretend we saw one
return '\n';
}
现在黑客看起来像这样:
std::string in;
while (std::cin >> in)
std::cout << piglatin(in) << look_for_nl(std::cin);