게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 동적할당 질문좀 하겠습니다 ㅜ
게시물ID : computer_65162짧은주소 복사하기
작성자 : 키큰사람
추천 : 0
조회수 : 521회
댓글수 : 3개
등록시간 : 2012/11/13 16:46:48

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char word[22];
FILE*fp;
fp=fopen("abc.txt","rt");
int count_kor=0,kor=0; //한글
int count_eng=0,eng=0; //영어
int count_num=0,num=0; //숫자
int count_han=0,han=0; //한자
int count_etc=0,etc=0; //특수문자
int kor_eng=0; //한글+영어
int len=0;
int i;
if((fp=fopen("abc.txt","rt"))==NULL){
 fprintf(stderr,"파일을 열 수 없습니다.\n");
 exit(1);}
 
while(fscanf(fp,"%s",word) != EOF)
{
  count_eng=0;
  count_kor=0;
  count_num=0;
  count_etc=0;
  count_han=0;
  len=strlen(word);
 
  //word= (char*)malloc(sizeof(char)*len+1);
  for(i=0;i<len; i++) //문자열길이만큼 반복
   {
   
   if((0x41<=word[i] && word[i]<=0X5A) || (0X61<=word[i] && word[i]<=0X7A))//영어
       count_eng++;
   else if(0x30<=word[i] && word[i]<=0x39)//숫자
    count_num++;
   else if(word[i]>=0x21 && word[i]<=0x2F)//특수문자
    count_etc++;
   else if(word[i] & 0x80) //첫번째 비트가 1인가
       {
    if((word[i] >= 0xffffffB0) && (word[i] <= 0xffffffC8) && (word[i+1] >= 0xffffffA1) && (word[i+1] <= 0xffffffFE))
    count_kor++;//한글
    else
     count_han++;//한자
       }   
   }
  //memset(word,0,250*sizeof(char));
  if(count_eng>0 && count_kor>0) //한글+영어
   kor_eng++;
  else if(count_eng>0 && count_kor==0)//영어
   eng++;
  else if(count_kor>0 && count_eng==0)//한글
   kor++;
  else if(count_num>0)//숫자
   num++;
  else if(count_etc>0)//특수기호
   etc++;
  else if(count_han>0)//한자
   han++;
 
}
printf("한글단어는%d 영어%d 한글+영어%d 한자%d 특수문자%d 숫자%d 개입니다. \n",kor,eng,kor_eng,han,etc,num);
fclose(fp);
return 0;
}

 

일단 텍스트 파일의 영어, 한글, 영어 한글갯수를 세는 프로그램입니다.. 구조체같은걸 쓰지않고 그냥 짠거라 지저분하긴한데..

아무튼 이걸 적은 크기의 텍스트 파일에서 돌리면 정확하게 카운터가 되는데요..

교수님이 갑자기 20m짜리 파일을 뙇!!!

역시나 큰파일로 해서 해보니깐 안되더라구요  ㅜㅜ

 

그래서 일단 아마도 word[20]라는 단어를 세는 배열에 동적배열을 쓰면 좀더 메모리를 적게 잡고 쓸수 있지 않을까해서

동적할당을 해봤는데요

 

char *word;

 word= (char*)malloc(sizeof(len+1));

 

이런식으로 했는데 제가 책보고 배운걸로는 이렇게가 맞는것 같은데..ㅜㅜ

동적할당이 참 어려운것같아요...

그리고 저기서 프리를 하려면 어디에서 프리 시켜야 하나요?

와일문안에서 프리 시켜야 할까요?? 아 좀 도와주시면 감사하겠습니다 ㅜ;;

 

그리고 memset을 시키는것도 메모리에 도움이 될까요??

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