1. 문제
6. 동일한 크기의 배열을 변환하는 다음 2개의 static 멤버 함수를 가진 ArrayUtility2 클래스를 만들고, 이 클래스를 이용하여 아래 결과와 같이 출력되도록 프로그램을 완성하라.
2. 결과
3. 코드
#include <iostream>
using namespace std;
class ArrayUtility2 {
public :
static int* concat(int s1[], int s2[], int size){
int* p = new int[size];
int n = size/2;
for(int i=0; i< n; i++) {
p[i] = s1[i];
p[i+n] = s2[i];
}
return p;
}
static int* remove(int s1[], int s2[], int size, int& retSize) {
for(int i=0; i< size; i++) {
for(int j=0; j< size; j++) {
if(s1[i] == s2[j] ) s1[i] =NULL;
}
}
for(int i=0; i< size ; i++)
if(s1[i] !=NULL) retSize++;
int *p = new int [retSize];
int n=0;
for(int i=0; i< size; i++)
if(s1[i] !=NULL ) { p[n] = s1[i]; n++; }
if(retSize == 0) return NULL;
else return p;
}
};
int main() {
int x[5], y[5], retsize=0, size;
cout << "정수를 5 개 입력하라. 배열 x에 삽입한다>>";
cin >> x[0] >> x[1] >> x[2] >> x[3] >> x[4];
cout << "정수를 5 개 입력하라. 배열 y에 삽입한다>>";
cin >> y[0] >> y[1] >> y[2] >> y[3] >> y[4];
cout << "합친 정수 배열을 출력한다." << endl;
size = sizeof(x)/4 + sizeof(y)/4;
int *temp = ArrayUtility2::concat( x, y, size );
for(int i=0; i< size;i++) cout << temp[i] << ' ';
cout << endl;
size = sizeof(x)/4;
temp = ArrayUtility2::remove( x, y, size, retsize );
cout << "배열 x[]에서 y[]를 뺀 결과를 출력한다. 개수는 " << retsize << endl;
for(int i=0; i< retsize;i++) cout << temp[i] << ' ';
cout << endl;
}
4. 설명
static int* concat() 함수는 2개의 int형 배열과 size를 입력 받으면, 크기가 size만큼인 int형 배열을 동적으로 생성한 후 2개의 배열을 연결한 배열 하나를 return 합니다.
static int* remove() 함수는 2개의 배열과 size 그리고 참조 변수 retSize를 입력 받습니다.
그 후 첫 번째 배열과 두 번째 배열을 비교하여서 첫 번째 배열의 요소 중 두 번째 배열의 요소와 일치하지 않는 것의 수를 구한 후 retSize에 저장합니다. 그리고 이 과정에서 첫 번째 배열에서 일치하는 요소는 NULL값을 삽입합니다.
그 후 retSize 크기만큼의 int형 배열을 동적으로 생성한 후 첫 번째 배열의는 첫 번째 배열과 두 번째 배열 중 일치하지 않는 값 빼고는 다 NULL을 삽입하였으므로 NULL이 아니라면 동적 생성했던 배열의 요소로 삽입합니다.
그리고 이 동적 생성하였던 배열을 return함으로써 일치하지 않는 요소들만 저장되어있는 배열을 생성합니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 6장 8번 (0) | 2019.04.13 |
---|---|
명품 C++ programming 실습문제 6장 7번 (0) | 2019.04.13 |
명품 C++ programming 실습문제 6장 5번 (0) | 2019.04.13 |
명품 C++ programming 실습문제 6장 4번 (0) | 2019.04.13 |
명품 C++ programming 실습문제 6장 3번 - (2) (0) | 2019.04.12 |