일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로그래머스
- 시스템호출
- python
- git
- 구조체배열
- 카카오 코테
- Spring
- 카카오
- 파이썬
- 컴포넌트스캔
- thymeleaf
- C언어
- C++
- nestJS
- AWS
- 해시
- 코딩테스트
- TypeORM
- @Component
- 알고리즘
- OpenCV
- Nodejs
- 코테
- 카카오 알고리즘
- 스프링
- 가상면접사례로배우는대규모시스템설계기초
- spring boot
- nestjs typeorm
- @Autowired
- nestjs auth
Archives
- Today
- Total
공부 기록장 💻
명품 C++ Programming 4장 실습 문제 - 동적 메모리 할당, 객체 동적 생성, 객체 배열, string 문자열 객체 본문
# Language & Tools/C++
명품 C++ Programming 4장 실습 문제 - 동적 메모리 할당, 객체 동적 생성, 객체 배열, string 문자열 객체
dream_for 2021. 4. 19. 16:34(명품 C++ 프로그래밍 4장)
1.
#include <iostream>
using namespace std;
class Color {
int red, blue, green;
public:
Color() { red = blue = green = 0; }
Color(int r, int g, int b) { red = r;green = g;blue = b; }
void setColor(int r,int g, int b) { red = r;green = g;blue = b; }
void show(){ cout << red << ' ' << green << ' ' << blue << endl; }
};
int main() {
Color screenColor(255, 0, 0);
Color* p = &screenColor;
p->show();
Color colors[3];
p = colors;
p[0].setColor(255, 0, 0);
p[1].setColor(0, 255, 0);
p[2].setColor(0, 0, 255);
for (int i = 0;i < 3;i++)
p[i].show();
cout << endl;
}
2.
#include <iostream>
using namespace std;
int main() {
int n, sum = 0;
cout << "정수의 개수 몇 개? >> ";
cin >> n;
int* arr = new int[n];
cout << "정수 " << n << "개 입력>> ";
for (int i = 0;i < n;i++) {
cin >> arr[i];
sum += arr[i];
}
cout << "평균 " << (double)sum / n << endl;
}
3.
(1) 문자열에서 특정한 값 탐색 (at(), []이용)
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
char c;
int cnt = 0;
cout << "문자열 입력 >> ";
getline(cin, s);
cout << "검색할 문자 >> ";
cin >> c;
// s.length(), s.size()
for (int i = 0;i < s.length();i++) {
if (s[i] == c)cnt++;
//if (s.at(i) == c) cnt++;
}
cout << "문자 " << c << "는 " << s << "에 " << cnt << "개 있습니다." << endl;
}
(2) 문자열에서 특정한 값 찾아 인덱스를 리턴하는 find 함수 이용
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
char c;
int index = 0;
cout << "문자열 입력 >> ";
getline(cin, s);
cout << "검색할 문자 >> ";
cin >> c;
index = s.find('a'); // 문자열의 시작부터 a 찾아 index
while (index>0) {
cout << index << "번째에서 a 발견" << endl;
index = s.find('a', index+1);
}
}
4.
#include <iostream>
using namespace std;
class Sample {
int* p;
int size;
public:
Sample(int n) { size = n;p = new int[n]; }
void read() {
cout << size<< "개 입력 >> ";
for (int i = 0;i < size;i++) cin >> p[i];
}
void write() {
for (int i = 0;i < size;i++)cout << p[i] << " ";
}
int big() {
int big = p[0];
for (int i = 1;i < size;i++)if (p[i] > big)big = p[i];
return big;
}
~Sample() {
if (p)delete[]p;
}
};
int main() {
Sample s(10);
s.read();
s.write();
cout << endl<<"가장 큰 수는 " << s.big() << endl;
}
5.
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
srand((unsigned)time(NULL));
string s;
string alpha("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
while (true) {
cout << "아래에 한 줄을 입력하세요.(exit이면 종료)" <<endl<< ">>";
getline(cin, s);
if (s == "exit")break;
int n = rand() % s.length(); // 문자열의 인덱스 중 하나(변경될 문자에 해당하는 랜덤 인덱스 값)
s[rand()%n] = alpha[rand() % alpha.size()];
cout << s << endl << endl;
}
}
문자열을 입력 받아 글자 하나를 랜덤하게 수정하여 출력한다.
여러가지 방법이 있겠지만, 나는 직접 string alpha 객체를 생성하여
알파벳 소문자/대문자 전체로 문자열을 초기화하였다.
아스키 코드값을 이용하여 변경하기 위해선 다음과 같은 방법을 사용하였다.
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
string s;
cout << "아래에 한 줄을 입력하세요.(exit를 입력하면 종료합니다)" << endl;
while (true) {
cout << endl << ">>";
getline(cin, s);
if (s == "exit")break;
// s.length() 내에서 변경할 문자 하나 선택
srand((unsigned)time(NULL));
int n = rand() % s.length();
// a~z 까지 하나로 선택
char alphaN = rand() % 26 + 97;
// 만약 이전과 동일한 문자면 소문자로
if (s[n] == alphaN)alphaN = rand () % 26 + 65;
// 문자 변경
s[n] = alphaN;
// 변경된 문자열 출력
cout << s;
}
}
6. 문자열 거꾸로 출력
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cout << "아래에 한 줄을 입력하세요.(exit를 입력하면 종료합니다)" << endl;
while (true) {
cout << endl << ">>";
getline(cin, s);
if (s == "exit")break;
for (int i = s.length();i >= 0;i--)
cout << s[i];
cout << endl;
}
}
7.
#include <iostream>
#include <string>
using namespace std;
class Circle {
int radius;
public:
void setRadius(int r) { radius = r; }
double getArea() {
return 3.14 * radius * radius;
}
};
int main() {
Circle circle[3];
int temp;
int cnt = 0;
for (int i = 0;i < 3;i++) {
cout << "원 " << i+1 << "의 반지름 >> ";
cin >> temp;
circle[i].setRadius(temp);
if (circle[i].getArea() > 100)cnt++;
}
cout << "면적이 100보다 큰 원은 " << cnt << "개 입니다."<<endl;
}
8.
7 번 문제에서 수정
int main() {
int n;
cout << "원의 개수 >> ";
cin >> n;
Circle* circle = new Circle[n];
int temp;
int cnt = 0;
for (int i = 0;i < n;i++) {
cout << "원 " << i+1 << "의 반지름 >> ";
cin >> temp;
circle[i].setRadius(temp);
if (circle[i].getArea() > 100)cnt++;
}
cout << "면적이 100보다 큰 원은 " << cnt << "개 입니다."<<endl;
}
9.
#include <iostream>
#include <string>
using namespace std;
class Person {
string name;
string tel;
public:
string getName() { return name; }
string getTel() { return tel; }
void set(string name, string tel) {
this->name = name;
this->tel = tel;
}
};
int main() {
int n;
cout << "몇 명의 번호를 저장하시겠습니까 ? >> ";
cin >> n;
Person* person = new Person[n];
cout << "이름과 전화 번호를 입력해 주세요" << endl;
string name, tel;
for (int i = 0;i < n;i++) {
cout << "사람 " << i + 1 << " >> ";
cin >> name >> tel;
person[i].set(name, tel);
}
cout << endl << "---------정보 출력---------" << endl;
for (int i = 0;i < n;i++) {
cout << "사람 " << i + 1 << " >> " <<person[i].getName() << " " << endl;
}
cout << endl << "검색할 사람의 이름 >> ";
cin >> name;
for (int i = 0;i < n;i++)
if (person[i].getName() == name)
cout << "전화 번호는 " << person[i].getTel() << endl;
}
10.
#include <iostream>
#include <string>
using namespace std;
class Person {
string name;
public:
Person() {}
Person(string name) { this->name = name; }
string getName() { return name; }
void setName(string name) { this->name = name; }
};
class Family {
Person* p; // Person 배열에 대한 포인터
int size; // Family 클래스에서 생성될 배열 객체 개수
string name; // Family 이름
public:
// Family 생성자
Family(string name, int size) {
p = new Person[size]; // 입력 받은 size에 대해서 Person 객체 포인터 생성
this->name = name; // Family 이름
this->size = size; // Family 멤버수
}
void setName(int n, string name) {
p[n].setName(name); // 가족 멤버의 이름 설정
}
void show() {
cout << name << "가족은 다음과 같이 " << size << "명 입니다." << endl;
for (int i = 0;i < size;i++)
cout << p[i].getName() << '\t';
cout << endl;
}
~Family() { delete[]p; }
};
int main() {
Family* simpson = new Family("Simpson", 3);
simpson->setName(0, "Mr.Simpson");
simpson->setName(1, "Mr.Simpson");
simpson->setName(2, "Mr.Simpson");
simpson->show();
delete simpson;
}
11.
#include <iostream>
using namespace std;
class Container {
int size;
public:
Container() { size = 10; }
void fill() { size = 10; }
void consume() { size--; }
int getSize() { return size; }
};
class CoffeeVendingMachine {
Container tong[3];
void fill();
void selectEspresso();
void selectAmericano();
void selectSugarCoffee();
void show();
public:
void run();
};
void CoffeeVendingMachine::fill() {
for (int i = 0;i < 3;i++)
tong[i].fill();
}
void CoffeeVendingMachine::selectEspresso() {
for (int i = 0;i < 2;i++) {
if (tong[i].getSize() == 0) {
cout << "원료가 부족합니다" << endl;
run();
}
}
tong[0].consume(); tong[1].consume();
cout << "에스프레소 드세요" << endl;
}
void CoffeeVendingMachine::selectAmericano() {
for (int i = 0;i < 2;i++) {
if (tong[i].getSize() == 0) {
cout << "원료가 부족합니다" << endl;
run();
}
}
tong[0].consume(); for (int i = 0;i < 2;i++)tong[1].consume();
cout << "아메리카노 드세요" << endl;
}
void CoffeeVendingMachine::selectSugarCoffee() {
for (int i = 0;i < 3;i++) {
if (tong[i].getSize() == 0) {
cout << "원료가 부족합니다" << endl;
run();
}
}
tong[0].consume();
tong[1].consume();tong[1].consume();
tong[2].consume();tong[2].consume();
cout << "설탕커피 드세요" << endl;
}
void CoffeeVendingMachine::show() {
cout << "커피 " << tong[0].getSize() << ", 물 " << tong[1].getSize() << ", 설탕 " << tong[2].getSize() << endl;
}
void CoffeeVendingMachine::run()
{
int menu;
while (1) {
cout << "메뉴를 눌러주세요(1: 에스프레소, 2: 아메리카노, 3: 설탕커피, 4 : 잔량보기, 5: 채우기) >> ";
cin >> menu;
switch (menu) {
case 1:selectEspresso();break;
case 2:selectAmericano();break;
case 3:selectSugarCoffee();
case 4:show();break;
case 5:fill();break;
}
}
}
int main() {
CoffeeVendingMachine *machine=new CoffeeVendingMachine;
cout << "***** 커피 자판기를 작동합니다. *****" << endl;
machine->run();
delete machine;
}
12.
728x90
반응형
'# Language & Tools > C++' 카테고리의 다른 글
[C++] 연산자 중복 함수 (Operator Overloading Function) 와 프렌드 함수 (Friend Function) (0) | 2021.05.05 |
---|---|
명품 C++ Programming 3장 실습 문제 - 클래스, 객체, 생성자, 소멸자, 인라인 함수 (0) | 2021.04.20 |
[C++] 중간고사 목차 정리 (0) | 2021.04.18 |
[C++] 함수 중복/오버로드(function overload)와 모호성 (0) | 2021.04.15 |
[C/C++] const 지정자 (0) | 2021.04.15 |
Comments