Studies/C++

05 제어문과 함수/배열

쿠뱃봉 2022. 1. 18. 18:53

1. 포인터 배열

포인터 배열은 포인터 변수들을 배열요소로 갖는 배열이다.

char* ptr_ary[5];

 

1-1 실습 1

10개의 정수 데이터를 랜덤하게 저장한 후, 원본 데이터의 순서는 변경시키지 말고,

데이터를 정렬하여 출력하세요.

 

(1) 코드

#include<iostream>
#include<string>
#include<ctime>
using namespace std;
void printArr(int* num) {
	for (int i = 0; i < 6; i++) {
		cout << num[i] <<  " ";
	}
	cout << endl;
}
int main() {
	int num[6] = { 10,50,60,20,5,70 };
	int* arr[6];
	for (int i = 0; i < 6; i++) {
		arr[i] = &num[i];
	}
	cout << "정렬전: ";
	printArr(num);
	//정렬
	for (int i = 0; i < 5; i++) {
		for (int j = i + 1; j < 6; j++) {
			if (*arr[i] < *arr[j]) {
				int* temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	cout << "정렬후: ";
	printArr(num);
	cout << endl;
	cout << "정렬후: ";
 	for (int* i : arr)
		cout << *i<<" " ;


	return 0;
}

int num[6] 배열이 있다.

int* arr[6] 은 &num[i] , 즉 배열방의 주소를 저장한다.

정렬 알고리즘에서 arr에서 배열방의 주소를 swap한다.

따라서 결과적으로 *arr[i] 를 출력하면 정렬되어 출력되며

printArr()의 매개변수로 int* num ,즉 배열의 주소값을 넘겨서 출력해보면

원래의 데이터의 순서대로 출력된다.

 

(2)실행결과

 

2.문자열 배열

2가지 방법이 있다.

1)문자열 배열의 메모리 구조

char str[]="Hello";

str[0]='h'로 원하는 문자를 바꿀 수 있다.

 

2)문자열 포인터 변수의 선언과 메모리 구조

char *str="Hello";

str은 포인터 변수로, 1)번과 달리 원하는 문자를 바꿀 수 없다.

 

2-1 실습 1

3차원 배열 : 3명,id,password

 

(1)코드

#include<iostream>
#include<string>
#include<ctime>
using namespace std;



int main() {
	
	char userinfo[3][2][10] = { {"greenjoa1","1234"},{"greenjoa2","2234"},{"greenjoa3","3234"} };
	char id[10], pw[10];
	cout << "아이디와 비밀번호 : ";
	cin >> id >> pw;
	for (int i = 0; i < 3; i++) {
		if (strcmp(id, userinfo[i][0]) == 0) {
			if (strcmp(pw, userinfo[i][1]) == 0) {
				cout << "로그인 성공" << endl;
				break;
			}
		}
	}
	return 0;
}

 

(2)실행결과

 

3.레퍼러스 변수를 인자로 전달하기

 

(1)코드

#include<iostream>
#include<string>
#include<ctime>
using namespace std;

void swap(int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;

}

int main() {
	int a = 10, b = 20;
	swap(a, b);
	cout << a << " " << b << endl;

	return 0;
}

 

(2)실행결과

 

2-2 실습 2

 

로그인 구현

checkID  checkPW 포인터변수, 레퍼런스 변수 형식으로 매개변수 전달해서 함수 구현해보기

#include<iostream>
#include<ctime>
using namespace std;
bool checkID(char  (&userinfo)[3][2][10], char(& id)[10],int& index) {
//포인터변수로
//bool checkID(char (*userinfo)[2][10],char* id)
//bool checkID(char userinfo[][2][10], char id[]) {
	for (int i = 0; i < 3; i++) {
		if (strcmp(id, userinfo[i][0]) == 0) {
			index = i;
			return true;
		}
	
	}
}

bool checkPW(char(&userinfo)[3][2][10], char(&pw)[10], int& index) {
	if (strcmp(pw, userinfo[index][1]) == 0)
		return true;
	else
		return false;

}
int main() {

	char userinfo[3][2][10]
		= { {"greenjoa1","1234"},{"greenjoa1","1234"} ,{"greenjoa1","1234"} };
	char id[10], pw[10];
	cout << "아이디와 비밀번호 : ";
	cin >> id >> pw;
	int index;
	if (checkID(userinfo, id,index)) {
		if (checkPW(userinfo, pw,index)) {
			
		}
	}
	return 0;
}