C언어 malloc 사용하여 텍스트 파일을 불러 단어 평균 길이 구하기.
-
게시물 수정 , 삭제는 로그인 필요
키보드 입력으로 지정한 파일로 data를 읽어
파일내에 단어를 출력, 또 전체 단어의 평균길이를 구합니다.
조건 : 동적 메모리로 확보,
2. 중복된 단어는 한번만 처리.
일단 저는 그냥 메모리를 줬는데
이걸 malloc을 사용하여 동적으로 줘야 하거든요... 그걸 잘 못하겠어서...
그리고 중복된 단어를 어떻게 처리하는지...
실행화면에서 파일명을 입력하면 결과는
(텍스트가 이육사의 광야라고 한다면,,)
1번째 단어 : 광야 단어길이 : 4
2번째 단어 : 이육사 단어길이 : 6
. : 까마득한 단어길이 : 8
: 날에 단어길이 : 4
.
.
.
통합 갯수 : 평균단어길이 :
이렇게 구해야 합니다.
제가 지금 만든걸로는 통합갯수가 중복된 것이 제외되지 않거든요..
그리고 단어길이와 평균단어 길이도 안되구요..
좀 고쳐주세요.
---------------------------------------
#include "stdio.h"
int main(void)
{
// 읽은 단어들을 저장할 단어문자열 배열공간을 선언
char words[100][32];
char file[255];
int pre;
int i=0, count;
// 읽을 화일에 대한 포인터
FILE* fin;
// 질문이 화일로 부터 입력을 받을지 키보드로 입력을
// 받을지 명확하지가 아니하므로 ..
printf( "파일을 입력하세요. 파일 내 단어들의 평균 길이를 알려드립니다. \n" );
pre = getchar();
// 그냥 엔터 했으면 화일포인터를 stdin( 표준입력으로 지정 )
if( pre == '\n' )
fin = stdin;
else
{
ungetc( pre, stdin );
gets( file );
fin = fopen( file, "rt" );
if( fin == NULL )
{
printf( "지정하신 파일을 열 수가 없습니다.\n" );
return 1;
}
}
while(1)
{
if( fin == stdin )
printf( "\n단어입력 <엔터키>\n종료는 EOF(Ctrl+Z)입력\n" );
if( fscanf( fin, "%s", words[i] ) !=1 )
break;
i++;
}
count = i;
printf( "%d개의 단어를 읽었습니다.\n", count );
for( i = 0; i < count; i++ )
printf( "%d 번째 단어 : %s 단어길이 : \n", i,words[i] );
if( fin != stdin )
fclose( fin );
return 0;
}
키보드 입력으로 지정한 파일로 data를 읽어
파일내에 단어를 출력, 또 전체 단어의 평균길이를 구합니다.
조건 : 동적 메모리로 확보,
2. 중복된 단어는 한번만 처리.
일단 저는 그냥 메모리를 줬는데
이걸 malloc을 사용하여 동적으로 줘야 하거든요... 그걸 잘 못하겠어서...
그리고 중복된 단어를 어떻게 처리하는지...
실행화면에서 파일명을 입력하면 결과는
(텍스트가 이육사의 광야라고 한다면,,)
1번째 단어 : 광야 단어길이 : 4
2번째 단어 : 이육사 단어길이 : 6
. : 까마득한 단어길이 : 8
: 날에 단어길이 : 4
.
.
.
통합 갯수 : 평균단어길이 :
이렇게 구해야 합니다.
제가 지금 만든걸로는 통합갯수가 중복된 것이 제외되지 않거든요..
그리고 단어길이와 평균단어 길이도 안되구요..
좀 고쳐주세요.
---------------------------------------
#include "stdio.h"
int main(void)
{
// 읽은 단어들을 저장할 단어문자열 배열공간을 선언
char words[100][32];
char file[255];
int pre;
int i=0, count;
// 읽을 화일에 대한 포인터
FILE* fin;
// 질문이 화일로 부터 입력을 받을지 키보드로 입력을
// 받을지 명확하지가 아니하므로 ..
printf( "파일을 입력하세요. 파일 내 단어들의 평균 길이를 알려드립니다. \n" );
pre = getchar();
// 그냥 엔터 했으면 화일포인터를 stdin( 표준입력으로 지정 )
if( pre == '\n' )
fin = stdin;
else
{
ungetc( pre, stdin );
gets( file );
fin = fopen( file, "rt" );
if( fin == NULL )
{
printf( "지정하신 파일을 열 수가 없습니다.\n" );
return 1;
}
}
while(1)
{
if( fin == stdin )
printf( "\n단어입력 <엔터키>\n종료는 EOF(Ctrl+Z)입력\n" );
if( fscanf( fin, "%s", words[i] ) !=1 )
break;
i++;
}
count = i;
printf( "%d개의 단어를 읽었습니다.\n", count );
for( i = 0; i < count; i++ )
printf( "%d 번째 단어 : %s 단어길이 : \n", i,words[i] );
if( fin != stdin )
fclose( fin );
return 0;
}
#c언어 malloc #c언어 malloc free #c언어 malloc 배열 #c언어 malloc 쓰는 이유 #c언어 malloc calloc #c언어 malloc 2차원 배열 #c언어 malloc 사용법 #c언어 malloc 헤더 #c언어 malloc.h #c언어 malloc 초기화