ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 05 제어문과 함수/배열
    Studies/C++ 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;
    }

    'Studies > C++' 카테고리의 다른 글

    07 클래스(1)  (0) 2022.01.25
    06 동적할당  (0) 2022.01.24
    STL 자료구조  (0) 2022.01.09
    04 c++ 배열  (0) 2022.01.08
    03 c++ 조건문 활용(카페 프로그램)  (0) 2022.01.08

    댓글

Designed by Tistory.