cd ~/mis2 tar zxvf report418.tgz「~/mis2/report418」というディレクトリができているはずなので,そこにファイルを作成した上で,
cd ~/mis2/report418 g++-5 -o 0 0.cc ./0 < sample.txtのようにコンパイル,実行してみてください.
#include <iostream> #include <string> #include <vector> using namespace std; int main(){ vector<string> lines; for (string line; getline(cin, line); ){ lines.push_back(line); } for (size_t i = 0; i < lines.size(); ++i){ cout << lines[i] << endl; } }getlineについて説明します. C++ Referenceでgetlineを検索するとstd::getline(string)の説明にあるように,istream型のオブジェクト(引数として渡したストリームと同一)の参照を返します.ifの条件でこれを使うと,operator boolによって,bool型の値(true or false)に変換されるのですが,ファイルの終端 EOF(end of file) まで来たのにgetlineを呼んだ後のcinをbool型に変換するとfalseになります.それにより,ファイルの終端を判別できます.なお,
for (string line; getline(cin, line); ){ lines.push_back(line); }の代わりに,istreamのEOFをチェックするメンバ関数eofを明示的に呼び出して,
for (string line; getline(cin, line), !cin.eof(); ){ lines.push_back(line); }と書いても同じです(EOF以外のエラーでgetlineが終了した時にループを抜けられないことを除いて).
g++-5 -o 0 0.ccとしてコンパイルして,作成された実行ファイル(Mac環境では 0 )を
./0 < sample.txt > 0.outとして実行すると,ファイル 0.out が作られる(「<」や「>」でコマンドの入力や出力をファイルに割り当てられる.詳しくはHWB:15.5パイプとリダイレクションを参照のこと).
diff 0.out 0.txtを実行して出力例と一致していることを確認する(diffは2つのテキストファイルの異なる行を表示するコマンド).
2問解けない場合は1問でも提出して構いません.
締切は,4/30(日) 23:59.締切を過ぎても2017年7月末までは6割を上限に採点します.