안녕하세요!
이번 시간 역시 예전에 공부했던 C언어를 포스팅하려고 합니다.
그중에서 일반적인 회문 판별 알고리즘인데요.
입력된 문자열의 공백까지 제거해서 띄어쓰기 없는 문자열로 회문을 판별하는 실습을 진행하겠습니다.
우선 회문이 무엇인지 알아야 하는데요.
"회문이란?"
거꾸로 읽어도 제대로 읽는 것과 같은 문장, 낱말, 숫자, 문자열을 가리킵니다.
예를 들어 "level" 같은 단어는 정방향, 역방향 어느 쪽으로 읽어도 같은 "level"이기 때문에 회문입니다.
오늘 구현해볼 것은 회문에 공백을 제거하여 출력하는 알고리즘을 작성하는 것입니다.
배열에 넣고 반복문을 돌리게 되면 따로 공백 제거를 해주지 않는 이상 인덱스 순서대로 읽기 때문에
공백 문자가 포함되어 있으면 공백 문자 또한 문자열로 취급합니다.
따라서 작성자의 의도대로 입력된 문자열만을 나타내 주기 위해서는 공백 문자 역시 제거되어야 합니다.
사실 대부분의 프로그램은 이런 공백 문자를 제거하는 trim이 구현되어 있습니다.
프로그램 코드가 그렇게 복잡하지는 않습니다.
먼저 코드를 보겠습니다.
C program code
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void Palindrome (char string[]);
void RemoveSpace (char *str);
int main() {
char string[100];
int leng = 0;
printf("문자열을 입력하세요:");
gets(string);
RemoveSpace(string);
Palindrome(string);
return 0;
}
void Palindrome(char string[]){
int i;
int j=0;
int length;
length = strlen(string);
for(i = 0 ; i < length/2; i++) {
if(string[i] != string[length - 1 - i]) {
j = 1;
}
}
if(j==0) {
printf("회문입니다");
}
else {
printf("회문이 아닙니다");
}
}
void RemoveSpace(char *str) {
char *d = str;
do {
while(isspace(*d)) {
++d;
}
*str++ = *d++;
} while(*str != '\0');
}
우선 코드를 살펴보시면 ctype.h라는 라이브러리를 사용하고 있습니다.
C에서 제공하는 표준 라이브러리인데요.
문자들의 조건을 확인하고 반환하는 함수를 포함하고 있는 라이브러리입니다.
Palindrome 함수는 회문을 판별하는 함수입니다.
length/2로 문자열 길이의 반을 검사하는데 i는 앞부터 length-1-i는 뒤부터 검사하여 가운데에서 만납니다.
검사하면서 앞 인덱스와 뒤의 인덱스 번호가 일치하는 위치의 문자열이 다르면 j = 1이 되고,
else문을 만나 회문이 아닌 것을 확인합니다.
RemoveSpace 함수는 문자열의 공백을 제거하는 함수입니다.
입력받은 문자열의 공백을 확인하는 isspace를 통해 문자열의 공백을 검사합니다.
여기서 isspace는 공백, \n, \t, \v, \f, \r 등을 검사하여 0이 아닌 수를 반환합니다.
출력 결과
위에 보시는 것처럼 공백이 없는 문자열과 공백이 있는 문자열 모두 회문으로 판별하는 모습입니다.
C를 공부하면서 회문 예제를 한 번쯤 보실 수 있는데,
여러 가지 자료구조에서 회문 알고리즘을 응용하여 사용할 수 있습니다.
C 강의 때 처음 회문을 접해보고, 자료구조 시간에 스택, 큐, 덱을 이용한 회문을 실습했던 기억이 있네요!
공부하면서 회문과 공백 제거를 동시에 다루는 예제가 거의 없었던 것 같아요.
공부나 과제에 참고하셨으면 합니다!
고생하셨습니다!
'Programming > C, C++' 카테고리의 다른 글
[C/C++] C언어 Deque 덱을 이용해 문자열을 입력받아 회문 판별하기 (0) | 2021.04.23 |
---|---|
[C/C++] C언어 스택(Stack)을 이용한 간단한 문자열 압축하기 (0) | 2021.04.23 |
[C/C++] C 언어 동적 메모리 할당을 이용해 구구단 출력 (0) | 2021.04.21 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!