문타쿠, 공부하다.
[C언어 코딩 도장] Unit 47. 회문 판별과 N-gram 만들기 본문
47.1 회문 판별
회문(palindrome)이란?
-> 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어나 문장을 말한다.
ex) 우영우, 기러기, 토마토, SOS, rotator, level ...
내가 작성한 회문 판별 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char word[20];
int length;
int palindrome;
printf("단어를 입력하세요>> ");
scanf("%s", word);
length = strlen(word);
for (int i = 0; i < length; i++)
{
if ((i == length - (i + 1)) || (i > length - (i + 1)))
break;
else
{
if (word[i] == word[length - (i + 1)])
{
// O
palindrome = 1;
continue;
}
else
{
// X
palindrome = 0;
break;
}
}
}
if (palindrome)
printf("이 단어는 회문입니다.(%d)\n", palindrome);
else
printf("이 단어는 회문이 아닙니다.(%d)\n", palindrome);
return 0;
}
책에 나와 있는 회문 판별 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main(void)
{
char word[30];
int length;
bool isPalindrome = true;
printf("단어를 입력하세요: ");
scanf("%s", word);
length = strlen(word);
for (int i = 0; i < length / 2; i++)
{
if (word[i] != word[length - 1 - i])
{
isPalindrome = false;
break;
}
}
printf("%d\n", isPalindrome);
return 0;
}
47.2 N-gram 만들기
N-gram이란?
-> 문자열에서 N개의 연속된 요소를 추출하는 방법
ex) "Hello"라는 문자열을 문자(글자) 2-gram으로 추출하면 다음과 같은 결과가 나온다.
He
el
ll
lo
내가 작성한 문자(글자) 2-gram 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char word[10];
int length;
printf("단어를 입력하세요>> ");
scanf("%s", word);
length = strlen(word);
for (int i = 0; i < length; i++)
{
if (i == length - 1)
break;
printf(">> %c%c\n", word[i], word[i + 1]);
}
return 0;
}
책에 나와 있는 문자(글자) 2-gram 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char text[30] = "Hello";
int length;
length = strlen(text);
for (int i = 0; i < length - 1; i++)
{
printf("%c%c\n", text[i], text[i + 1]);
}
return 0;
}
내가 작성한 단어 2-gram 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char text[100] = "this is c language";
char* arr[50] = { NULL, };
char* ptr = strtok(text, " ");
int count = 0;
while (ptr != NULL)
{
arr[count] = ptr;
count++;
ptr = strtok(NULL, " ");
}
for (int i = 0; i < count; i++)
{
if (arr[i + 1] == NULL)
break;
printf("%s %s\n", arr[i], arr[i + 1]);
}
return 0;
}
책에 나와 있는 단어 2-gram 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char text[100] = "this is c language";
char* tokens[30] = { NULL, };
char* ptr = strtok(text, " ");
int count = 0;
while (ptr != NULL)
{
tokens[count] = ptr;
count++;
ptr = strtok(NULL, " ");
}
for (int i = 0; i < count - 1; i++)
{
printf("%s %s\n", tokens[i], tokens[i + 1]);
}
return 0;
}
'C언어 > C언어 코딩 도장' 카테고리의 다른 글
[C언어 코딩 도장] Unit 48. 구조체 사용하기 (0) | 2023.10.29 |
---|---|
[C언어 코딩 도장] Unit 47. 연습문제 및 심사문제 (0) | 2023.10.03 |
[C언어 코딩 도장] Unit 46. 연습문제 및 심사문제 (0) | 2023.10.03 |
[C언어 코딩 도장] Unit 46. 문자열과 숫자를 서로 변환하기 (0) | 2023.10.03 |
[C언어 코딩 도장] Unit 45. 연습문제 및 심사문제 (0) | 2023.10.02 |