티스토리 뷰
끝말 잇기를 하는 프로그램을 만듭니다.
단어를 입력하고 이미 입력된 단어나 끝말 잇기가 되지 않는 단어는 확인하여 제외합니다.
end를 입력하면 입력을 끝내고 그 동안 입력한 모든 단어를 차례로 출력합니다.
입력한 단어는 그 길에 맞는 동적 할당 영역에 저장하며 입력 가능한 단어 수는 최대 100개로 제한합니다.
실행결과는 다음과 같습니다.
/*
실행결과
단어 입력 : apple
단어 입력 : elephant
단어 입력 : tiger
단어 입력 : rabbit
단어 입력 : tiger
이미 존재 하는 단어입니다.
단어 입력 : pineapple
단어 잇기가 불가능합니다.
단어 입력 : tomato
단어 입력 : end
apple elephant tiger rabbit tomato
*/
다음은 제가 작성한 코드와 그 실행결과입니다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
char* letters[101] = {0};
int isEnd = 0, count = 0;
while (1)
{
char temp[41];
//임시로 단어 입력하는 로직
printf("단어 입력 : ");
fgets(temp, 41, stdin);
temp[strlen(temp) - 1] = '\0';
if (strcmp(temp, "end") == 0) break;
//중복검사를 수행하는 로직
int isTwins = 0;
for (int i = 0; i < count; i++)
{
if (strcmp(temp, letters[i]) == 0)
{
isTwins = 1;
break;
}
}
if (isTwins)
{
printf("이미 존재하는 단어입니다!\n");
continue;
}
//이전 단어와 이어지는지 검사하는 로직
int doNotconnect = 0;
if (count >= 1)
{
if (letters[count - 1][strlen(letters[count - 1]) - 1] != temp[0])
{
doNotconnect = 1;
}
}
if (doNotconnect)
{
printf("단어 잇기가 불가능합니다!\n");
continue;
}
letters[count] = (char*)malloc(sizeof(char) * (strlen(temp) + 1));
if (letters[count] == NULL)
{
printf("메모리가 부족합니다.\n");
exit(1);
}
strcpy(letters[count], temp);
count++;
}
for (int i = 0; i < count; i++)
{
printf("%s ", letters[i]);
free(letters[i]);
}
}
/*
실행결과
단어 입력 : apple
단어 입력 : elephant
단어 입력 : tiger
단어 입력 : rabbit
단어 입력 : tiger
이미 존재하는 단어입니다!
단어 입력 : pineapple
단어 잇기가 불가능합니다!
단어 입력 : tomato
단어 입력 : end
*/
'공부 일지 > C언어 공부 일지' 카테고리의 다른 글
사용자 정의 자료형2 (0) | 2021.01.29 |
---|---|
사용자 정의 자료형 (0) | 2021.01.29 |
동적 메모리 할당 및 활용 관련 문제1 (0) | 2021.01.28 |
동적 할당 저장 공간의 활용 (0) | 2021.01.28 |
메모리 동적 할당 (0) | 2021.01.28 |