본문 바로가기

C_Data Structure_Algorithm/C telephone v1.0

C 전화번호부 v1.0_1)

자료구조란 ?

우리가 부여한 데이터들을 , 어디에, 어떤 구조로 저장할 것인가.

일반적으로 대부분의 경우에는, 자료구조를 결정하고 , 그 다음, 코드를 작성한다.

어떤 데이터를 보관하고, 유지하고, 다뤄야 하는지를 생각해본다.

이 경우에는 비교적 자명하다.

프로그램이 저장해야 할 데이터는 기본적으로

사람의 이름과, 전화번호부 이다.

여러 사람의 이름들과 , 그 사람들의 전화번호부.

가장 기본적인 방법은 물론, '배열' 을 사용하기.

왜 ? 사람이 여러명이니까,

전화번호도 여러명이니까

사람 이름은 각각이 문자열인데, 그 문자열이 여러개 있는것.

우리가 일반적으로 동일한 타입의 데이터가 여러개 있을 때, 그 데이터를 저장하는 가장 기본적인 자료구조는 '배열'이다.

이 경우에는 데이터가 2 가지 ( 전화번호, 이름 )

그래서 names, numbers 라는 2개의 배열을 지정한다.

그렇다면 '배열'은 어떻게 정의할까 ?

# define CAPACITY 100 # defien BUFFER_SIZE 100 char *names[CAPACITY}; // 배열을 정의할 때 필요한 것은 3가지이다. // 1. 배열의 이름 ex. names // 2. 배열의 크기 ex. CAPACITY // 3. 배열의 type ex. char *

 

< 보조 설명 >

배열의 type ??

= 그 배열의 각 칸에 저장되는 data 의 type 이 뭐냐.

이와 같이 예를 들어서,

names[ ] 라는 배열에 저장되는 데이터의 타입은 "John\0" 과 같은 문자열 이다. 즉, 문자의 배열이다.

즉, names[ ] 라는 배열에 저장되는 것은 사람의 '이름' 이고,

사람의 '이름' 이란, 그 자체로 하나의 string 이다.

string 이라는 것은 다시 문자들의 배열이다.

예를 들어 ,John 은, 이 자체가 길이가 4 인 문자열이다.

복습하자면, C 언어 에서 문자열을 만드는 방법은,

배열을 만들어서

각 칸에 문자 하나씩을 넣는 것이다.

J O H N \n 이렇게 .

그리고 names 라는 배열의 첫칸.

즉, names[ 0 ] 은,

J o h n \0 이라는 배열의 "주소"를 가리키는 것이다.

' \0 ' 이 들어가는 이유는, C 언어에서

모든 문자열의 끝에는

NULL CHAR 을 넣어주기 때문이다.

즉, names 라는 배열의 각칸에 저장되는 것은 " 주소 " 이다.

그리고 그 "주소" 에 가면, 있는 것이 하나의 "문자" 이므로

그것은 char * 이 되는 것이다.

names 라는 배열의 type 은 char* 이 되는 것이다.

char *number{CAPACITY};

비록 전화번호부도, 숫자이지만, 숫자로 다루는 것보다는

하나의 문자열 처럼 다루는 것이 좋다. 왜 ?

예를 들어

051-234-6787 : 이렇게 번호 사이사이에 - 부호를 넣거나.

하는 경우가 많기 때문에,

그 외에도 다양한 이유가 있어서

전화번호부 도, 문자열 처럼 다루기

 

 

# define CAPACITY 100
    # defien BUFFER_SIZE 100
    
    char *name[CAPACITY};
    // 배열을 정의할 때 필요한 것은 3가지이다.
    // 1. 배열의 이름 ex. names
    // 2. 배열의 크기 ex. CAPACITY
    // 3. 배열의 type ex. char * 
    
    char *number{CAPACITY};
    int n = 0; // 현재 저장된 사람 수. ( 처음에는 0 명) 
    // 이후에 n ++ 시키면서, 점차 사람 수 한명 씩 증가시킬 것. 
    
    void add();
    void find();
    void status();
    void remove();
    
    
    int main() {
    
    	char command[BUFFER_SIZE];
    
    	while(1){
    
    // while(1) 이라는 것은 무한 루프를 말하는 것이다. 
    
    		printf("$ ");
    		scanf("%s" , command) ;
    // while 문 안에서 명령어를 하나 받고 다시 올라와라. 
    // scanf("%s") 로 사용자의 명령을 입력받아서, 그것을 command 라는 배열에 저장한다.  
    
    		if( strcmp ( command , "add" ) == 0 )
    			add();
    // strcmp 는 문자열을 비교하는 함수이고, 
    // 그 안에는 우리가 비교할 2개의 문자열을 넣는다. 
    // command 는 우리가 넣는 문자열 
    // add 는, 우리가 비교하고 싶은 문자열이다. 
    // 이 2개의 문자열이 동일하면, 0 를 반환한다. 
    		else if( strcmp ( command , "find" ) == 0 ) 
    			find();
    		else if( strcmp ( command , "status") == 0 ) 
    			status();
    		else if( strcmp ( command, "delete") == 0 )
    			remove();
    		else if( strcmp ( command , "exit" ) == 0 ) 
    			break;
    }
    
    		return 0;
    }

'C_Data Structure_Algorithm > C telephone v1.0' 카테고리의 다른 글

C 전화번호부 v1.0_2)  (0) 2020.02.28