문자열 자르기( 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 ) )
댓글