본문 바로가기
프로그래밍/C

[C언어] 문자열 자르기( strtok() ) / 문자열과 숫자 서로 변환하기 ( atoi(), strtol(), atof(), strtof() ) / 회문 판별, N-gram 만들기

by B T Y 2017. 10. 19.
반응형

문자열 자르기( strtok() ) / 문자열과 숫자 서로 변환하기 ( atoi(), strtol(), atof(), strtof() ) / 회문 판별, N-gram 만들기에 대해서 정리한다.

 

 

 

 

 

문자열 자르기

 

  - strtok(대상문자열, 기준문자);

    ( 기준문자는 "(큰 따옴표)로 묶어준다 )

 

  

 

  - <string.h> 헤더 파일에 정의되어 있다.

  - strtok() 함수는 자른 문자열을 NULL로 채운다.

    ( 더이상 자를 문자열이 없으면 NULL을 반환한다 )

 

     * 자른 문자열을 NULL로 채우기 때문에 반복해서 문자열을 자르는 작업을 하려면

       반복문을 이용해서 strtok() 함수를 사용할때 대상문자열을 NULL로 준다.

 

     * strtok() 함수를 이용해서 문자열을 자르면 원본 문자열을 변환하기 때문에 사용에 주의한다.

 

 

 

 

    문자열 포인터 자르기

 

          - 문자열 포인터에 문자열 리터럴이 들어있어서 읽기 전용인 경우에 strtok() 함수를 사용 할 수 없다.

              ( 컴파일시 에러 발생 )

 

          - 동적 메모리를 할당한후에 strcpy() 함수를 이용해서 문자열 포인터에 문자열을 복사한뒤

            strtok() 함수를 사용하면 된다.

 

 

 

 

    날짜와 시간값 자르기

 

          - 다양한 특수 문자와 알파벳 영문자를 기준으로 문자열을 자르는것도 가능하다.

               ( strtok() 함수에서 기준문자를 여러개 설정하는 것도 가능하다 )

 

              * 기준문자를 여러개 설정할때는 구분자 없이 "(큰 따옴표) 안에 연속으로 적어주면 된다.

 

 

 

 

    자른 문자열 보관하기

 

          - 자른 문자열을 보관했다가 사용하기 위해서 문자열 포인터 배열에 보관을 해뒀다가 사용할 수 있다.

 

 

 

 

 

문자열과 숫자 서로 변환하기

 

 

  - 문자열을 정수로 바꾸기 위해서는 'atoi(문자열)' 형식을 사용한다.

        ( <stdlib.h> 헤더 파일에 정의되어 있다 )

 

 

       * 문자열에 숫자말고 영문자나 특수문자가 섞여 있으면 해당 부분부터는 변환하지 않는다.

           ( 문자열 처음부터 영문자나 특수문자로 시작한다면 0을 반환한다 )

 

 

 

 

 

  - 특정진법으로 표기된 문자열을 정수로 변환하려면 'strtol(문자열, 끝포인터, 진법)' 형식을 사용한다.

        ( <stdlib.h> 헤더 파일에 정의되어 있다 )

 

 

       * 문자열 안에 10진수와 16진수가 섞여 있는 문자열을 각각 따로 가져와서 출력하고 싶을때 끝포인터를 이용한다.

 

 

 

 

 

  - 문자열을 실수로 변환하는 방법은 atof(문자열) 형식을 사용한다.

        ( <stdlib.h> 헤더 파일에 정의되어 있다 )

 

 

       * 문자열을 정수로 바꿀때와 마찬가지로 영문자나 특수문자가 섞여 있다면 해당 부분부터는 변화하지 않는다.

 

 

 

 

 

  - 문자열 안에 있는 여러개의 실수를 변환하고 싶을때는 strtof(문자열, 끝포인터) 형식을 사용한다.

        ( 마찬가지로 <stdlib.h> 헤더 파일에 정의되어 있다 )

 

 

       * 마찬가지로 문자열을 doulbe형 실수로 변환할때는 strtod(문자열, 끝포인터) 형식을 사용하고

         동작 방식은 strtof() 함수와 같다.

 

 

 

 

   - 정수를 문자열 형태로 변환하는 방법은 sprintf() 함수를 이용한다.

 

     * sprintf(문자열, "%d", 정수)

       sprintf(문자열, "%f", 정수)

       sprintf(문자열, "%x", 정수)

 

 

 

 

회문 판별과 N-gram 만들기

 

  - 회문은 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장

    ( 회문은 유전자 염기서열 분석에 많이 쓰인다 )

 

      * "level", "SOS", "rotator" 등과 같은 문자열을 회문이라고 한다.

 

 

 

 

 

 

  - N-gram은 문자열에서 N개의 연속된 요소를 추출하는 방법

 

      * 예를 들어서 "Hello"라는 문자열을 2-gram 추출한다면 아래와 같이 나온다.

               He

               el

               ll

               lo

 

 

( N-gram 원리( 2-gram ) )

 

 

 

 

 

반응형

댓글