easy software

C언어 포인터와 배열을 이용한 회문검사 프로그램 본문

C언어/포인터와 배열

C언어 포인터와 배열을 이용한 회문검사 프로그램

JAVA 웹개발자 2015. 1. 23. 16:17

이번에는 조금 난이도가 있다면 있는 문제일 수 있습니다.

 

사용자가 문자열을 입력하면, 회문이 맞는지 아닌지를 출력해주는 프로그램입니다.

 

회문이란? abba, noon, akka, eee, ere 등등 앞 뒤를 바꿔도 동일한 문자가 되는 것을 뜻합니다.

 

우선 회문을 검사하려면, 사용자가 입력한 문자열의 길이를 알아야합니다.

 

그리고 문자열의 길이/2를 하여 반복문에서 문자열의 앞과 뒤를 검사해서

 

같은지를 확인해야 합니다.

 

반복문을 모두 수행하지 않았어도, 중간에 같지 않은 문자가 발견된다면, 반복을 중단하고

 

회문이 아니라는 것을 출력해주면 됩니다.

 

아래 코드 보시죠.

 

 

#include <stdio.h>

 

//문자열이 회문인지 아닌지를 알려주는 함수
void pal(char* ptr, int len){

 

     int count = 0;

 

for (int i = 0; i < len / 2; i++){

          //i번째 맨 처음과 맨 마지막 문자가 같으면 count값 증가
          if (ptr[i] == ptr[len - i - 1])
               count++;

          //같지 않으면 반복문 탈출
          else{
               printf("회문이 아닙니다.");
               break;
          }
     }

 

//count값이 len/2와 같아야 회문
 if (count == len / 2)
      printf("회문입니다.");
}

 

//문자열의 길이를 알려주는 함수
int leng(char* ptr){

 

int leng = 0;

 

//null문자를 만날때까지 반복
 while (ptr[leng] != '\0')
      leng++;

 

     return leng;


}

 

int main(void){

 

     char str[100];
     int length;

 

     printf("문자열 입력 : ");
     scanf_s("%s", str, 100);

 

     length = leng(str); //문자열의 길이를 알기 위해 leng함수 호출
     pal(str, length); //문자열과 길이를 인자로 pal 함수에 전달

 

     printf("\n");

 

     return 0;


}

Comments