//////////////// 파일의 모든 내용 읽고 출력 //////////////// 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);


'C/C++언어 > STL' 카테고리의 다른 글

STL std::string에서 쓸 수 있는 Replace All 함수  (0) 2010.07.04
STL 컨테이너(map, multimap)  (0) 2010.07.04
STL 숙제.. 렌터카 2번째..  (0) 2008.05.02
STL 강좌입니다.  (0) 2007.09.06

+ Recent posts