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;
}