while (1): study();

단어 검출 프로그램 본문

학습/C, C++

단어 검출 프로그램

전국민실업화 2021. 12. 16. 01:00
728x90
텍스트 파일에서 등록된 단어 이외의 단어를 찾아 새로운 파일에 출력합니다. 모든 단어의 길이는 최대 20자, 등록 단어 수는 최대 10개로 제한하며 검출 대상 단어 수는 제한이 없습니다. b.txt에서 a.txt에 등록되지 않은 단어를 찾아 c.txt에 출력합니다.

 

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

int get_words(char**, FILE*);
void file_open_error(void);
void free_all(int, int);


int main(void)
{
	FILE* wfp, * ifp, * ofp;
	int i, j;
	int is_detected; // printing flag
	char* words[10], *inputs[10]; // word lists
	int len_words, len_inputs; // lengths of each list

	wfp = fopen("a.txt", "r");
	if (wfp == NULL) file_open_error();
	ifp = fopen("b.txt", "r");
	if (ifp == NULL) file_open_error();
	ofp = fopen("c.txt", "w");
	if (ofp == NULL) file_open_error();

	len_words = get_words(words, wfp);
	len_inputs = get_words(inputs, ifp);

	for (i = 0; i < len_inputs; i++)
	{
		is_detected = 0;
		for (j = 0; j < len_words; j++)
		{
			if (strcmp(inputs[i], words[j]) == 0)
			{
				is_detected = 1;
				break;
			}
		}
		if (is_detected) continue;
		fputs(inputs[i], ofp);
		fputs("\n", ofp);
	}

	// release resources
	for (i = 0; i < len_words; i++) free(words[i]);
	for (i = 0; i < len_inputs; i++) free(inputs[i]);
	fclose(wfp);
	fclose(ifp);
	fclose(ofp);

	return 0;
}

void file_open_error(void)
{
	fprintf(stdout, "%s", "failed to create file stream");
	exit(1);
}

int get_words(char** ary, FILE* stream)
{
	int i = 0;
	int word_length;
	char tmp[20];
	char* res;

	while (1)
	{
		res = fgets(tmp, sizeof(tmp), stream);
		if (res == NULL)
		{
			fflush(stream); // initialize stream buffer
			return i;
		}

		word_length = strlen(tmp);
		ary[i] = (char*)malloc(sizeof(char) * (word_length + 1));
		if (ary[i] == NULL)
		{
			printf("failed to allocate memory");
			exit(1);
		}
		strcpy(ary[i], tmp);
		ary[i++][word_length - 1] = '\0';
	}
}

 

728x90

'학습 > C, C++' 카테고리의 다른 글

사칙연산 계산기  (0) 2021.12.16
[C언어] 전처리 지시자  (0) 2021.12.16
성적 처리 프로그램  (0) 2021.12.14
소수 계산 프로그램  (0) 2021.12.13
프로필 교환 프로그램  (0) 2021.12.12
Comments