cd ~/mis2 tar zxvf report1.tgz「~/mis2/report1」というディレクトリができているはずなので,そこにファイルを作成した上で,
cd ~/mis2/report1 g++-8 -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++-8 -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問でも提出して構いません.
締切は,5/5(日) 23:59.締切を過ぎても2019年7月末までは6割を上限に採点します.