std::string s;
std::cin >> s;

って具合に次々に文字列を読み込んでいくと、
確かに空白で区切られて読み込まれるんだけど、
改行した、ってのは認識できないですよね?
std::cin.peek() == '\n' とかで判定するんですか?