본문 바로가기

C_Data Structure_Algorithm

C 전화번호부 v4.0_2) load if( read_line ( fp, buffer, BUFFER_LENGTH) < = 0 ) : 더 이상 읽을 게 없으면, break 만일 유효한 정보가 있다면, name ~ group 정보를 읽고, 그 기준은 # 구분자를 기준으로 적용하는 것이다. 첫번째 ~ 4번째 token 이 각각 name ~ group 으로 들어가는 것이다. 기억할 것은, 존재하지 않는 항목은 한칸의 공백 문자이다. 이름이 없는 사람은 없으니, 해당 사항이 없지만, number ~ group 같은 경우, 없을 수 있으므로, 그 경우에는 한 개의 공백 문자로 이루어진 string 이 되는 것이다. 그리고 다 읽게 되면, 그것을 add ( ) 를 통해 directory에 추가한다. ​ add 4개의 문자를 받는다. 그리고, 알.. 더보기
C 전화번호부 v4.0_1) 1. 개요 지금까지는, 이름, 전화번호, 이메일 주소, 그룹을 지정할 수 있다. 이름 제외한 다른 항목들은 비워둘 수도 있다. 어떤 사람은 이름과 이메일 주소만. 있을 수도 있다. 위를 보면, 예를 들어, add 함수를 실행하고 사람 이름을 치면, 컴퓨터가 물어본다. phone ,email, group 은 뭐냐. 라고 불필요한 2개의 공백은 저장될 때 1개의 공백으로, 프로그램이 알아서 저장한다. 우리는, 입력한 정보를 directory.txt 로 저장한다. 그렇기 때문에, 파일의 형식을 살펴봐야 한다. 1) 각각의 사람에 대해 이름, 전화번호, 이메일, 그룹 등을 모두 지정해야 하는데, 어떤 사람은 1개만, 2개만 등등이 있을 수 있다. 그런데, 지금까지 전화번호부를 만들었을 때와 동일한 방식으로 저장.. 더보기
C 전화번호부 v2.0_2) 4) add 자. 여기서부터는 이제 위에서 설명한 ' 정렬' 을 반영해서 할 건데, 왜 load 함수에서는 저러한 것들을 반영 안했어 ? 왜냐하면, 우리는 파일을 불러올 때, 이미 그 파일이 정렬되었다고 가정하기 때문이다. 당연히 add 할 때는, 우리가 새로운 사람을 추가하는 것이니까, add 할 사람의 이름과 번호를 buf1, buf2 에 입력받는다. 이제 이 사람을 전에는 그냥 맨 뒤에 추가했는데, 정렬을 반영해서 넣는 것이다. ​ 처음에 i = n - 1; 즉, i 가 맨 마지막 사람을 뜻하는 것이다. 그 다음 strcmp( names[ i ] , buf1 ) i 번째 사람의 이름과, 내가 추가할 사람의 '이름'을 비교하는 것이다. strcmp( names[ i ] , buf1 ) 두 문자열이 같.. 더보기
C 전화번호부 v3.0 Q. 왜 .... **name 이야 ? 왜 이중 포인터 배열을 쓴거야 ?? 1. 개요 예를 들어, 이와 같이, 명령 프롬프트 다음에 특정 명령을 입력하지 않고, 엔터를 쳐서 그 다음 줄로 넘어가게 되면, 명령 프롬프트 다음으로 넘어가는 것이 아니라, 엔터를 쳐서 그다음으로 넘어가게 된다. 따라서 우리는, 명령 프롬프트를 실행해서, 아무런 명령 없이 엔터를 쳐도, 그 다음 명령 프롬프트로 바로 넘어갈 수 있게 해주는 것이 목적이다. 또한, 이상한 명령어를 넣으면, 그에 해당하는 적절한 오류 메시지를 출력하도록 해주는 것이다. 이를 위해서는 사용자가 엔터를 칠 때까지, 그것이 몇개의 단위로 구성되었는지 관계없이, 라인 단위로 입력을 받고, 그에 대한 처리를 하는 것이 필요하다. 배열의 용량을 초과할 경우에는.. 더보기
C 전화번호부 v2.0_1) 1) 추가할 기능 ​ 1) 이 프로그램에 추가할 기능은 전화번호부 정보를 file 에 저장하고, 다시 읽어오는 기능 먼저 file 안에 저장할 때 어떤 형식으로 저장할지 지정해야 하는데, 이 file 안에 한줄 당 한 사람의 정보가 저장이 된다. 이름. 전화번호. 이렇게 간단한 형식으로 저장이 된다. 프로그램 실행 후 read , 파일 이름. txt 이를 통해, 파일 안의 정보를 읽어오고, add 를 통해, 사람의 정보를 추가 delete 을 통해 , 지우고 status 로 현황 파악 save로 현재 파일을 저장. 이러한 과정을 반복한다. 2) 뿐만 아니라, 저장을 할 때, 사람들의 이름이 알파벳 순서대로 저장될 수 있게 끔 해주어야 한다. ( 추가 기능 ) ​ ​ ​ 2) 전화번호부 2.0 2번째 전화.. 더보기
C 전화번호부 v1.0_2) 1) add 함수 우선, add 명령어의 경우, 아래의 그림과 같이. 2개의 인자값을 줘야 한다 사람 이름 그 사람의 전화번호 다시 2번의 scanf 를 통해 즉, buf1, buf2 를 통해, 사람 이름.과 그 사람의 전화번호.를 받는다. 사람 이름은 buf1, 전화번호를 buf2 names[ n ] = strdup( buf1 ) numbers[ n ] = strdup( buf2 ) 각 배열의 n 번째 칸에 저장한다. 왜 n 번째 칸일까 ? n 이라는 것은, 이미 저장되어있는 사람 수. 처음 n 은 0이다. 배열 index 는 0부터이니까 따라서 만약 5명의 사람이 저장되어 있다면 배열 index 상으로는 0 ~ 4 일 것이다. 그러므로 names[ 5] 를 하게되면, 그 다음 사람을 추가하는 개념이 .. 더보기
C 전화번호부 v1.0_1) 자료구조란 ? 우리가 부여한 데이터들을 , 어디에, 어떤 구조로 저장할 것인가. 일반적으로 대부분의 경우에는, 자료구조를 결정하고 , 그 다음, 코드를 작성한다. 어떤 데이터를 보관하고, 유지하고, 다뤄야 하는지를 생각해본다. 이 경우에는 비교적 자명하다. 프로그램이 저장해야 할 데이터는 기본적으로 사람의 이름과, 전화번호부 이다. 여러 사람의 이름들과 , 그 사람들의 전화번호부. 가장 기본적인 방법은 물론, '배열' 을 사용하기. ​ 왜 ? 사람이 여러명이니까, 전화번호도 여러명이니까 사람 이름은 각각이 문자열인데, 그 문자열이 여러개 있는것. 우리가 일반적으로 동일한 타입의 데이터가 여러개 있을 때, 그 데이터를 저장하는 가장 기본적인 자료구조는 '배열'이다. 이 경우에는 데이터가 2 가지 ( 전화번.. 더보기
5) (예제2)C isspace, read_line(줄단위 읽기 ) 한 것을 그대로 출력하는 것이 아니라, 불필요한 부분은 제외하고 출력하는 것 원리. 즉, imput 을 보면, 공백을 입력받기도 하는데, 이와 같이 불필요한 입력값들은 저장하지 말고, 필요한 것들만 compressed 라는 이름의 문자배열에 저장해서 출력하기. 공백은 제거 필요한 값들은 저장하기. IS 뒤에 있는 공백은 저장하되, 그 뒤에 이어지는 공백 2개는 없애야지 그렇다면 어떻게 이것을 가능하게 하냐 어떻게 필요한 공백을 선별적으로 추출할 수 있는가 우선 문자는 다 compressed 에 저장하기 공백을 보면, 그것을 compressed 에 저장할지 말지, 선택하는 코드를 넣기. 를 어떻게 해 ? 현재 compressed 에서 화살표는 compressed 의 i 번째 문자.이다. 만일 " i - 1.. 더보기