std::getlineは入力ストリームから1行文の文字列を取り出してくれる。
このとき、どこを文字列の終わりかとするのは環境によって異なる。
・vc
"\r\n"を文末として、そこまでの文字列を取り出す。
・gcc
"\n"を文末として、そこまでの文字列を取り出す。
gccの場合、"\r"がそのまま残っちゃうんだよね。
で、この"\r"が残ってると、何故かboost::algorithm::splitがエラー吐いて止まる。
緊急回避としてこんなプログラムをはさんだ。
gccでも"\r\n"を認識してくれていいと思う。
さらにメモ。
getlineの終了条件。
これで期待通りの動作をしてくれる。
このとき、どこを文字列の終わりかとするのは環境によって異なる。
・vc
"\r\n"を文末として、そこまでの文字列を取り出す。
・gcc
"\n"を文末として、そこまでの文字列を取り出す。
gccの場合、"\r"がそのまま残っちゃうんだよね。
で、この"\r"が残ってると、何故かboost::algorithm::splitがエラー吐いて止まる。
緊急回避としてこんなプログラムをはさんだ。
gccでも"\r\n"を認識してくれていいと思う。
// 改行コードを削除
if (line[line.size()-1] == '\n') line.erase(line.size()-1);
if (line[line.size()-1] == '\r') line.erase(line.size()-1);
さらにメモ。
getlineの終了条件。
これで期待通りの動作をしてくれる。
while ( std::getline(std::cin, line) ) {
std::cout << line << std::endl;
}