//////////////// 파일의 모든 내용 읽고 출력 //////////////// p161
//cout를 위해, ifstream을 위해, vector를 위해, string을 위해, for_each를 위해 각각 해더 추가
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
//for_each에서 string출력에 사용할 단항 함수 정의
void print_str(const std::string &str)
{
std::cout << str << std::endl;
}
...
using namespace std;
ifstream file("test.txt");
if(!file)
{
cerr << "Can't open file " << enld;
exit(0);
}
// file로부터 문자열을 읽으면서 vector에 저장
vector<string> strlist;
string temp;
while(file >> temp)
{
strlist.pushback(temp);
}
file.close();
// vector에 담긴 모든 string을 출력
for_each(strlist.begin(), strlist.end(), print_str);
//////////////// 파일 복사 //////////////// p140
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char *argv[])
{
using namespace std;
if(argc != 3) return 1;
string file1(argv[1]), file2(argv[2]);
ifstream in(file1.c_str(), ios_base::binary); // 복사할 파일 바이너리로 읽고
ofstream out(file2.c_str(), iso_base::binary); // 복사본 파일 바이너리로 쓸준비
out << in.rdbuf(); // 여기서 복사 진행
return 0;
}
//////////////// 조건이 맞으면 출력 //////////////// p141
#include <iostream>
#include <fstream>
#include <string>
template<typename t>
void if_cond_is_true_write_rst(
std::string filename,
std::streampos cond_pos, t cond,
std::streampos target_pos, t rst)
{
using namespace std;
// 읽기 쓰기 가능하게 파일을 연다
fstream file(filename.c_str(), ios_base::in | ios_base::out);
// 지정된 위치로 cond_pos 이동
file.seekg(cond_pos);
t real;
file.read(&real, sizeof real);
if(real == cond)
{
file.seekg(target_pos);
file.write(&rst, sizeof rst);
}
}
... 중략 (main 함수 등)
if_cond_is_true_rst("cond.txt", 10, 'J', 0, '-');
//////////////// 파일 크기 출력 //////////////// p144
#include <iostream>
#include <fstream>
#include <iterator>
#include <limits>
...
using namespace std;
string filename;
...
// 파일을 열고 맨 끝으로 옮긴다. (ate는 파일을 열자마다 EOF로 가게 한다)
ifstream in1(filename.c_str(), ios_base::ate);
streampos end = in1.tellg(); // EOF인 현재 위치를 받아온다
cout << "Size : " << end << endl; // 출력
in1.close();
ifstream in2(filename.c_str(), ios_base::binary);
// 파일 크기 계산
streamsize size = distance(istreambuf_iterator<char>(in2),
istreambuf_iterator<char>());
cout << "Size : " << size << endl;
in2.close();
//////////////// 정렬 문제 //////////////// p149
//영수증 출력 문제
#include <iostream>
#include <iomainp>
#include <string>
using namespace std;
struct item{ char name[32]; int price; int num;};
void print_title(
const string &kind, const string &price, const string &number)
{
cout << setw(15) << kind << setw(10) << price <<setw(10) << number << endl;
}
void print_item(const item & item)
{
cout << setw(15) << item.name << setw(8) << item.price << "원"
<< setw(8) << item.num << "개" << endl;
}
void print_total(int price)
{
cout << setw(33) << price << "원" << endl;
}
...
item itmes[3] = {
{"가나초콜릿", 900, 1}, { "파워에이드", 900, 1}, {"감자깡",450,2}
};
print_title("종류", "가격", "수량");
int price(0);
for(size_t i(0); i < sizeof items / sizeof (item); i++)
{
print_item(items[i]);
price += items[i].num * items[i].price;
}
print_total(price);