게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 질문입니다!!
게시물ID : computer_65203짧은주소 복사하기
작성자 : 키큰사람
추천 : 0
조회수 : 245회
댓글수 : 1개
등록시간 : 2012/11/13 21:40:29

너무 자주와서 민망하긴한데 ㅜ

 

해쉬테이블을 만들어 보려고 하는데요..

일단 해쉬테이블의 메모리 크기(해쉬테이블의 배열크기) 는 상관이 없다고 가정하고요.

 

파일을 읽으면서 단어가 같으면 카운터를 증가하고 아닐경우 해쉬테이블안에 아무렇게나 집어 넣으면됩니다.

(일단 비교자체만 안하고 메모리가 충분한 해쉬테이블에 넣으면됨)

 

일단 저는 해쉬짤줄몰라서...

텍스트 파일의 단어를  atoi해서 정수값으로 바꾸고 그 정수값을 해쉬테이블크기만큼 %해서 해쉬테이블에 넣으려고 하거든요!!

 

여기서 첫번째 질문!!

int number=atoi(string); 을 하면

number는 그냥 정수값이 아닌가요?? number % 해쉬테이블크기를 해서 넣고 싶은데..

number정수값이 바뀌질 않아요 ㅜㅜ 무슨 개념인가요? number 에 - 1 이런식으로 정수값을 해봐도 수학연산이랑은 안맞게 연산이 되더라구요

 

제가 만들어본건데 솔직히 제가 봐도 웃기지만..

왜 안되는지 문제점좀 지적해주시면 감사하겠습니다.

 

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define MAX_wordS 200000   

typedef struct tagWORD_COUNT
{
   char word_key[20];    // 최대20 자까지의단어
      int count;
} WORD_COUNT;

 
WORD_COUNT word[MAX_wordS];
      // 최대단어의수
//해쉬테이블 초기화 과정 각 버켓을들 공백으로 만드는것
///여기서 문자열 탐색키이므로 탐색키의 첫번쨰가 문자가 널이면 버켓이 비어있는것


void init_table(WORD_COUNT word[])
{

 for(int i=0; i<MAX_wordS; i++)
 {
  word[i].word_key[0]=NULL;
 }
}

void Addword_key(WORD_COUNT word_keys[],int *size,  char* token);
void Showword_key(WORD_COUNT word_keys[]);

 
int main()
{
  int count = 0;
      char str[20];
      FILE* file = fopen("a.txt", "rt");

      if ( file == NULL )
      {
            printf("file open error!\n");
            return 1;
      }

    init_table( word); //해쉬테이블 초기화  
      fscanf(file, "%s", str);   
   int  number=atoi(str) ;
   strcpy(word[number].word_key, str);

   while ( !feof(file) )
      {
   //단어하나추가(단어가추가될경우count 가1 증가됨)
            Addword_key(word,&count, str);

            // 다음단어읽기
            fscanf(file, "%s", str);
      }

       // 파일을닫음
      fclose(file);

       // 결과를출력
      printf("결과:\n");
      Showword_key(word);
      return 0;

}

 

void Showword_key(WORD_COUNT word_keys[])
{
   for ( int i = 0; i <MAX_wordS ; ++i )
   {
    if(!word_keys[i].count)  //카운트값이 0이 면 지나감
    continue;
    //카운트값이 0이상이면
    else
    printf("%s(%d)\n", word_keys[i].word_key, word_keys[i].count);
  
   }

}
 
void Addword_key(WORD_COUNT word_keys[],int *size,  char* token)
{
  int  number=atoi(token) ; //읽어온 문자열을 숫자로 바꾼다.

  //테이블에있는 word_key값이 널이 아니거나 읽어온  token과 값이 같으면 word count 를 하나 증가시킨다.
 if(word[number].word_key != NULL && strcmp(word[number].word_key,token)==0 )
 {
 ++word[number].count;
 return ;
 }
 else //word_key값이 널이 거나 읽어온 문자열과 같지 않으면 해당테이블에 복사
 {
  strcpy(word[number].word_key, token);
  word[number].count = 1;


 }

}

 

해쉬테이블은 짤줄 모르고.

그냥 제가 할수있는 것 까지만 해보려고 합니다 도와주시면 정말정말 감사할것같습니다!

 

 

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호