문자 Parser

C / C++ 2008/03/23 16:49 |

파일의 내용을 문자 단위로 읽어서 개행문자('\n')단위로 배열에 저장한다.

포인터 배열을 이용한다.


#include <stdio.h>
#include <windows.h>

#define BUFFER_SIZE   1024               // 버퍼의 크기
#define FILE_NAME   "exfile.txt"         // 파일 이름

// 에러 출력 함수
void ErrorHandling(char *message);

int main(void)
{
      char   Buffer[BUFFER_SIZE];         // 버퍼 사이즈
      int      Count = 0;                           // 카운트 값 "문자의 카운트 값"
      char   *line[BUFFER_SIZE];            // 문자열이 저장될 배열 개행문자 단위로 기록된다
      int     Temp = 0;                           // 개행문자의 갯수를 나타낸다.


FILE *fp;
fp = fopen(FILE_NAME, "r");
if ( NULL == fp )
{
          ErrorHandling("Error fopen()");
}


// 버퍼를 초기화 한다.
memset(Buffer, 0, sizeof(Buffer));

// 파일의 끝까지 읽는다.
while(!feof(fp))
{
       // 파일의 데이터를 문자단위로 읽어, Buffer에 저장한다.
      Buffer[Count] = fgetc(fp);

if ( 0 == feof(fp) && -1 == Buffer[Count] )      // 에러출력

{

ErrorHandling("Error fgetc()");

}


// 개행문자
if ( '\n' == Buffer[Count] )

{

// 버퍼의 길이를 구한다. NULL값 포함하여 구한다.
int Str_Len = strlen(Buffer)+1;


// 문자열의 길이만큼 배열을 동적할당하여 준다.
line[Temp] = (char*)malloc(sizeof(char)*Str_Len);


memset(line[Temp], 0, sizeof(char)*Str_Len);

memcpy(line[Temp], Buffer, sizeof(char)*Str_Len);


memset(Buffer, 0, sizeof(char)*Str_Len);

Temp++;

Count = 0;

continue;

}

Count++;

}

system("pause");

return 0;

}



void ErrorHandling(char *message)
{
                   fputs(message, stderr);
                   fputc('\n', stderr);
}

Trackback Address :: http://csm3138.tistory.com/trackback/2

댓글을 달아 주세요

  1. a 2008/06/24 14:18 Address Modify/Delete Reply

    aa

Linked list

C / C++ 2008/03/12 20:11 |
Linked list

Linked list란?
  - 배열은 메모리에서 데이터들이 서로 물리적으로 인접하고 있다. Linked list는 물리적으로 연결되어 있는 것이
    아니라, 논리적인 방법으로 연결되어 있는 자료구조를 말한다.
 
  - Linked list는 Node에 의해서 연결되어 있다.

Node란?
  - 데이터와 데이터를 연결하는 선이라는 의미를 지니고 있다. 노드는 데이터 이외에 각 노드간의 연결 상태에
     대한 정보인 링크를 추가로 가지고 있다.

  - 노드를 구성하는 정보는 데이터와 링크로 나눠지게 된다. 데이터는 데이터를 저장하는 변수를 뜻하며, 링크
     는 노드를 가리키는 포인터를 뜻한다.

  - 노드의 구성 예
     struct Node
     {
            int     Data;                     // 데이터를 저장하는 변수
            Node *next;                     // 링크, 자기 자신과 같은 구조체의 포인터를 갖는다.
      }
  - 노드의 링크에는 자기자신 다음에 올 노드의 포인터값이 들어간다. 이 포인터값을 이용하면 다음 노드를 찾을
     수 있다. 

  - 링크가 1개 존재하는 Linked list를 Single Linked list라고 하며, 링크가 2개 존재하는 Linked list를 Double
     Linked list라고 한다.

Node의 특징
  - 노드는 메모리가 물리적으로 연결되어 있는것이 아니라 논리적으로 연결되어 있기 때문에 노드의 삽입, 삭제
     등을 할때 배열처럼 메모리의 물리적인 이동이 필요없으므로 속도가 빠르다.

  - 하지만 검색등을 할때는 배열보다 오히려 느리다. 배열은 검색할때 인덱스 번호만으로 한번에 검색이 가능
     하지만 노드는 일일이 노드를 따라가야 하기 때문에 속도가 다소 느수도 있다.  

Single Linked list와 Double Linked list의 차이점
  - Single Linked list는 링크가 1개이기 때문에 단방향으로밖에 검색이 되지않는다. 하지만 Double Linked list는
     자신의 전노드와 다음노드의 값을 모두 가지고 있기때문에 양방향으로의 검색이 가능하다.


<< 단일연결리스트와 이중연결리스트의 그림>>

Trackback Address :: http://csm3138.tistory.com/trackback/1

댓글을 달아 주세요