Ver1.
int *p = 0;
int cnt = 0;
while(1){
printf("-- CONTROLLER --\n");
printf("(cnt : %d)\n", cnt);
for(int i=0; i<cnt; i++){
printf("%d ", p[i]);
}
printf("\n");
printf("----------------\n");
printf("1) 추가\n2) 삭제\n3) 삽입\n4) 종료\n");
printf("----------------\n");
int sel;
scanf("%d", &sel);
if(sel == 1){
if(cnt == 0){
p = new int[1];
} else {
int *temp = p;
p = new int[cnt+1];
for(int i=0; i<cnt+1; i++){
p[i] = temp[i];
}
}
printf("추가하는 숫자 입력 : ");
int data;
scanf("%d", &data);
p[cnt] = data;
cnt += 1;
}
else if(sel == 2){
if(cnt != 0){
int del_idx = -1;
int data;
printf("삭제할 값 입력 : ");
scanf("%d", &data);
// check del_idx
for(int i=0; i<cnt; i++){
if(data == p[i]){
del_idx = i;
}
}
if(del_idx != -1){
int *temp = p;
p = new int[cnt-1];
int j = 0;
for(int i=0; i<cnt; i++){
if(i != del_idx){
p[j] = temp[i];
j += 1;
}
}
cnt -= 1;
} else { printf("존재하지 않는 값입니다.\n"); }
}
}
else if(sel == 3){
printf("삽입할 인덱스 입력 : ");
int insert_idx;
scanf("%d", &insert_idx);
if(insert_idx < cnt){
printf("추가할 값 입력 : ");
int data;
scanf("%d", &data);
int *temp = p;
p = new int[cnt +1];
for(int i=0; i<cnt+1; i++){
if(i < insert_idx){
p[i] = temp[i];
}
else if(i > insert_idx){
p[i] = temp[i-1];
}
p[insert_idx] = data;
}
cnt += 1;
} else { printf("존재하지 않는 인덱스입니다.\n"); }
}
else if(sel == 4){
printf("종료합니다.\n");
break;
}
}
Ver2.
1차원 배열 컨트롤러
//# include <windows.h>
# include <stdio.h>
void print_arr(int* arr, int size){
printf("total : %d\n", size);
for(int i=0; i<size; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
void add_data(int** arr, int *size){
int data;
printf("data : ");
scanf("%d", &data);
int* temp = NULL;
if((*size) > 0){
printf("enter\n");
temp = *arr;
*arr = new int[(*size) +1];
for(int i=0; i<(*size); i++){
(*arr)[i] = temp[i];
printf("arr[i] : %d\n", (*arr)[i]);
}
(*arr)[(*size)] = data; //
} else{
}
printf("**arr : %d\n", **arr);
(*size) ++;
}
void run(int **arr, int *size)
{
printf("[1]add\n[2]delete\n[3]insert\nselect : ");
int sel;
scanf("%d", &sel);
if (sel == 1)
{
add_data(arr, size);
}
}
int main(){
// Vector Controller
int size = 10;
int* datas = new int[size];
for(int i=0; i<size; i++){
datas[i] = i+1;
}
while(true){
print_arr(datas, size);
run(&datas, &size);
}
return 0;
}
Ver2.
2차원 배열 컨트롤러
#include <stdio.h>
#include <stdlib.h>
void print_arr(int *size, int ***arr)
{
printf("total : %d\n", *size);
if (*size != 0)
{
for (int i = 0; i < *size; i++)
{
printf("{%d:", (*arr)[i][0]);
printf("%d} ", (*arr)[i][1]);
}
printf("\n");
}
}
void cat_itoa(int **arr, int data)
{
int digit = 0;
while (data % 10 > 0)
{
int *temp = *arr;
*arr = new int[digit + 1 + 1];
for (int j = 0; j < digit + 1; j++)
{
(*arr)[j + 1] = temp[j];
}
(*arr)[0] = data % 10;
data /= 10;
digit++;
delete[] temp;
}
}
int par_atoi(int** arr){
int idx = 0;
int digit = 0;
for(int i=0; (*arr)[i] != '\0'; i++){
digit ++;
}
// printf("digit : %d\n", digit);
for(int i=1; i<digit; i++){
idx += (*arr)[i] * (digit - i - 1 -1 == 0 ? 1 : pow(10, digit - i - 1 -1));
}
// printf("del_idx : %d\n", idx);
return idx;
}
int *check(int id, int pw, int *size, int ***arr)
{
int *result = new int[1];
result[0] = 'f';
for (int i = 0; i < *size; i++)
{
if ((*arr)[i][0] == id)
{
result[0] = 't';
if ((*arr)[i][1] == pw)
{
cat_itoa(&result, i);
}
}
}
return result;
}
void join(int *size, int ***arr)
{
int id, pw;
printf("id & pw 입력: \n");
scanf("%d", &id);
scanf("%d", &pw);
int *find = check(id, pw, size, arr);
if (find[0] == 'f')
{
if (*size == 0)
{
*arr = new int *[1];
(*arr)[0] = new int[2];
}
else
{
// 기존 데이터를 지켜줄 temp 배열이 필요
int **temp = *arr;
*arr = new int *[(*size) + 1];
for (int i = 0; i < (*size) + 1; i++)
{
(*arr)[i] = new int[2];
if (i != *size)
{
(*arr)[i][0] = temp[i][0];
(*arr)[i][1] = temp[i][1];
delete[] temp[i];
}
}
delete[] temp;
}
(*arr)[*size][0] = id;
(*arr)[*size][1] = pw;
(*size)++;
}
else
{
printf("이미 가입한 회원입니다.\n");
}
}
void leave(int *size, int ***arr)
{
int id, pw;
printf("탈퇴할 id & pw 입력:\n");
scanf("%d", &id);
scanf("%d", &pw);
int *find = check(id, pw, size, arr);
if(find[0] == 't'){
int del_idx = par_atoi(&find);
int** temp = *arr;
int arr_idx = 0;
*arr = new int*[(*size)-1];
for(int i=0; i<*size; i++){
if(i != del_idx){
(*arr)[arr_idx] = new int[2];
(*arr)[arr_idx][0] = temp[i][0];
(*arr)[arr_idx][1] = temp[i][1];
arr_idx ++;
}
delete temp[i];
}
(*size)--;
delete[] temp;
} else{
printf("존재하지 않는 회원입니다.\n");
}
}
void run(int *size, int ***arr)
{
int run = 1;
while (run)
{
print_arr(size, arr);
int sel;
printf("1)가입\n2)탈퇴\n");
scanf("%d", &sel);
if (sel == 1)
{
join(size, arr);
}
else if (sel == 2)
{
leave(size, arr);
}
else
{
continue;
}
}
}
int main()
{
// 회원가입 -> {{1,1},{2,2},...}
// 1. 가입
// 2. 탈퇴
int cnt = 0;
int **member; // 2차원 배열로 동적할당 (가변)
run(&cnt, &member);
return 0;
}
* itoa & atoi 함수 구현
'C > ☞' 카테고리의 다른 글
[57] 연습문제 : 더블 포인터 (0) | 2020.07.27 |
---|---|
[56] 더블 포인터 (0) | 2020.07.27 |
[55] 가변 배열 컨트롤러 (0) | 2020.07.27 |
[54] 동적할당 기본 (0) | 2020.07.27 |
[52] 문자열 함수 (0) | 2020.07.27 |
댓글