2020. 4. 25.

[자료구조] 인프런 5. 전화번호부 v1.0(2) 강의 정리



#pragma warning(disable:4996)
#include
#include
//strcmp 사용


#define CAPACITY 100
// 최대 100명을 저장한다.
#define BUFFER_SIZE 20

char* names[CAPACITY]; // namses
//names numbers char*타입의 배열이다.
char* numbers[CAPACITY]; //phone numbers
int n = 0; //number of people in phone directory

void add();
void find();
void status();
void remove();

int main() {
char command[BUFFER_SIZE];
while (1) {
printf("$ ");
// 프롬프트에 출력을 한다.
scanf("%s", command);
// 입력을 받아 command라는 배열에 저장한다.

if (strcmp(command, "add") == 0)
// strcmp함수는 두 문자열이 동일하면 0을 반환한다.
add();
else if (strcmp(command, "find") == 0)
// find를 입력하면 find
find();
else if (strcmp(command, "status") == 0)
status();
else if (strcmp(command, "delete") == 0)
remove();
else if (strcmp(command, "exit") == 0)
break;
//exit를 입력하면 while문을 빠져나간다.
}
return 0;



}

void add() {
char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE];
scanf("%s", buf1);
// 이름
scanf("%s", buf2);
// 전화번호

names[n] = strdup(buf1);
// n 번째 칸은 저장된 사람 수
// 사람이름 저장
numbers[n] = strdup(buf2);
// n 번째 칸에 전화번호 저장
// strdup 는 새로운 곳에 복사하여 넣고 주소를 리턴한다.
// strcpy 새로운 변수에 넣어준다.        

n++;

printf("%s was added successfully. \n", buf1);
}

void find() {
char buf[BUFFER_SIZE];
scanf("%s", buf);

int i;
for (i = 0; i < n; i++) {
if (strcmp(buf, names[i]) == 0) {
printf("%s\n", numbers[i]);
return;
//원하는 사람 찾는경우 여기서 끝난다.
}
}
printf("No person named '%s' exists.\n", buf);
// for문을 다 돌아서도 없을경우 오게되는곳
}

void status() {
int i;
for (i = 0; i < n; i++)
printf("%s %s\n", names[i], numbers[i]);
//전체를 포문으로 돌면서 출력함
printf("Total %d persons.\n", n);
// 총 몇명이 있다라고 출력해줌
}

void remove() {
char buf[BUFFER_SIZE];
scanf("%s", buf);
// 사람 이름을 입력받는다.
int i;
for (i = 0; i < n; i++) {
// 전체 전화번호부에서 찾는다.
if (strcmp(buf, names[i]) == 0) {
// 삭제할 사람을 찾는 구문
names[i] = names[n - 1];
numbers[i] = numbers[n - 1];
// 맨 마지막 사람을 삭제된 자리로 옮긴다.
n--;
printf("'%s' was deleted successfully. \n", buf);
return;
}
}
printf("No person named '%s' exists.\n", buf);
}




댓글 없음:

댓글 쓰기