관리 메뉴

공부 기록장 💻

명품 C++ Programming 11장 실습 문제 - istream, ostream, cin.ignore(), cin.get(), 포맷 출력, 조작자, 포맷 함수, 사용자 정의 >> << 연산자 본문

# Language & Tools/C++

명품 C++ Programming 11장 실습 문제 - istream, ostream, cin.ignore(), cin.get(), 포맷 출력, 조작자, 포맷 함수, 사용자 정의 >> << 연산자

dream_for 2021. 6. 1. 00:58

명품 C++ 프로그래밍 11장 

 

 

 

 

1.

ch=cin.get()

EOF

#include <iostream>
using namespace std;

int main(){
	int ch, cnt=0;
	
	while((ch=cin.get())!=EOF){
		if(ch=='\n') break;
		if(ch=='a') cnt++;		
	}
	cout<<"a의 개수는 "<<cnt<<endl;
}

 

 

2. 

istream& get(char ch)

cin.get() - cin.eof()

 

#include <iostream>
using namespace std;

int main(){
	char ch;
	int cnt=0;
	
	while(true){
		cin.get(ch); // istream& get(char ch) 함수 - cin 스트림 객체 버퍼에 입력받은 문자 ch를 저장 
		if(cin.eof() || ch=='\n')break; // 오류 확인하기 위해 cin 객체에 failbit 확인 -> cin.eof() 함수 사용 
		if(ch==' ') cnt++;
	}
	cout<<"공백의 개수는 "<<cnt<<endl;
}

 

 

3.

cin.ignore(int n, char ch);

 

#include <iostream>
using namespace std;

int main(){
	int ch;
    
	cin.ignore(100, ';');
	
	// 입력 받는 도중 개행 문자 만나면, ';'를 만날 때까지 리턴
	// 알파벳; abc '\n' 안녕;hello   
	while((ch=cin.get())!=EOF){
		cout<<(char)ch;
		if(ch=='\n')
			cin.ignore(100,';');
	}
	cout<<endl;
}

 

4.

cin.ignore()

cout.put()

#include <iostream>
using namespace std;

int main(){
	int ch;
	
	// 입력을 받는 도중, ';' 문자를 만나면 개행 문자를 만날 때까지 리턴 + endl 실행 
	while((ch=cin.get())!=EOF){
		if(ch==';'){
			cout.put('\n');
			cin.ignore(100,'\n');
		}
		else cout.put(ch);
	}
}

 

5.

string 객체, cin >>

#include <iostream>
using namespace std;

int main(){
	string cmd;
	
	while(true){
		cout<<"종료하려면 exit을 입력하세요 >> ";
		cin>>cmd;
		if(cmd=="exit") break;
	}
	cout<<"프로그램을 종료합니다...."<<endl;
}

 

getline(cin, s) 전역 함수

#include <iostream>
using namespace std;

int main(){
	string cmd;
	while(true){
		cout<<"종료하려면 exit을 입력하세요 >> ";
		getline(cin, cmd);
		if(cmd=="exit") break;
	}
	cout<<"프로그램을 종료합니다...."<<endl;
}

 

6.

<iomanip> - 조작자 함수

<math.h> - sqrt()

setw(), setfill(), setprecision(), left

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main(){
	// 필드 간격 15, 제곱근 유효숫자 3, 빈칸 _ fill
	// setw(15), setprecision(3), setfill('_')
	
	cout<<setw(15)<<left<<"Number";
	cout<<setw(15)<<left<<"Square";
	cout<<setw(15)<<left<<"Square Root"<<endl;
	
	for (int i=0;i<=45;i+=5){
		cout<<setw(15)<<setfill('_')<<i;
		cout<<setw(15)<<setfill('_')<<i*i;
		cout<<setw(15)<<setfill('_')<<setprecision(3)<<sqrt(i)<<endl;
		
	}
} 

 

7.

#include <iostream>
#include <iomanip>
#include <cctype>
using namespace std;

int main(){
	for (int i=0;i<4;i++)
		cout << "dec" << '\t' << "hexa" << '\t' << "char "<< '\t';
	cout<<endl;
	for(int i=0;i<12;i++) cout << "____" << '\t';
	cout << endl;
	
	for(int i=0;i<128;i++){
		cout.width(3); // setw(3) - format 함수 사용
		cout << left; // left 조작자함수 사용
		cout << dec << i << '\t' << hex << i << '\t' << (isprint(i) ? (char)i : '.') << '\t';
		if(i%4==3) // i%4==3 인 경우, 012'3', 456'7' 이 끝난 다음에 줄바꿈  
			cout << endl; 
	}
	
}

 

 

 

8.

istream&, ostream&의 << , >> 연산자 중복 정의하기

#include <iostream> 
using namespace std;

class Circle{
	string name;
	int radius;
public:
	Circle(int radius=1, string name=""){
		this->radius=radius;
		this->name=name;
	}
	friend istream& operator >> (istream& ins, Circle& c);
	friend ostream& operator << (ostream& outs, Circle c);
};

istream& operator >> (istream& ins, Circle& c){
	string name;
	
	cout << "반지름 >> ";
	ins >> c.radius;
	cout << "이름 >> ";
	ins >> c.name;
	return ins;
}
ostream& operator << (ostream& outs, Circle c){
	outs << "(반지름" << c.radius << "인 " << c.name << ")";
	return outs;
}

int main(){
	Circle d, w;
	cin >> d >> w; // 반지름과 이름 입력 받음 
	cout << d << w << endl; // (반지름r인 이름) 객체 출력 
}

 

9.

사용자 정의 << , >> 연산자 만들기

getline() 전역 함수

 

#include <iostream>
using namespace std;

class Phone{
	string name, telnum, address;
public:
	Phone(string name="", string telnum="", string address=""){
		this->name=name;
		this->telnum=telnum;
		this->address=address;
	}
	friend istream& operator >> (istream& ins, Phone& p);
	friend ostream& operator << (ostream& outs, Phone p);
};

istream& operator >> (istream& ins, Phone& p){
	cout<<"이름:";
	getline(ins, p.name);
	 
	cout<<"전화번호:";
	getline(ins, p.telnum);
	
	cout<<"주소:";
	getline(ins, p.address);
	
	return ins;
}
ostream& operator << (ostream& outs, Phone p){
	outs << "(" << p.name << "," << p.telnum << "," << p.address << ")";
	return outs;
}
int main(){
	Phone girl, boy;
	cin >> girl >> boy;
	cout << girl << endl << boy << endl;	
} 

 

10.

#include <iostream>
using namespace std;

istream& prompt(istream& ins){
	cout << "암호?";
	return ins; 
}

int main(){
	string password;
	while(true){
		cin >> prompt >> password;
		if(password == "C++") {
			cout << "login success !! " << endl;
			break;
		}
		else cout << "login fail. try again !! " << endl;
	}
}

 

11. 

#include <iostream>
using namespace std;

istream& pos(istream& ins){
	cout<<"위치는? ";
	return ins;
}

int main(){
	int x, y;
	cin >> pos >> x;
	cin >> pos >> y;
	cout << x << ',' << y << endl;
}

 

728x90
반응형
Comments