C라이브러리는 qsort()라는 좀더 진보된 정렬 함수를 제공한다.
ispunct() : 입력된 문자가 구두문자인지 아닌지를 판단합니다. 숫자와 알파벳 공백을 제외한 출력가능한 구두 문자일 때 true 반환
C 컴파일러는 main()이 전달인자를 전혀 사용하지 않거나, 두개의 전달인자를 사용하는 것을 허용한다. main
()이 두개의 전달인자를 사용할 때, 첫번째 전달인자는 명령행에 있는 문자열의 개수다. 이 첫번째 int형 전달인자를 argc라고 부른다. argc는 argv의 개수다.
프로그램은 메모리에 있는 명령행 문자열을 저장하고 포인터 배열에 있는 각 문자열 주소를 저장한다. 관례상 이 포인터들의 배열을 argv라고 한다. argv[0]는 프로그램 이름 자체가 대입된다. 그러고 나서 argv[1]은 그 다음에 오는 첫번째 문자열이 대입된다.
argv는 char형 포인터를 가리키는 포인터이다.
인자로 넣어주면 명령행 전달인자들은(argv) 문자열로 읽혀진다. 그러므로 수치값을 사용하려면, 먼저 문자열을 수로 변환해야한다. 그 수가 정수라면, alphanumeric to integer를 의미하는 atoi()함수를 사용할 수 있다.
atoi()함수는 문자열을 전달인자로 받아들여, 그것에 해당하는 정수값을 리턴한다.
문자열이 정수로 시작되는 문자열이라면 atoi()함수는 동작한다. 그런 경우에, atoi()는 정수 부분이 아닌 것을 만날 때까지 그 앞의 문자들만 변환한다.
ex) atoi("42regular")는 정수 42를 리턴한다.
atoi() 함수 선언은 stdlib.h에 들어가 있다. 또한 이 헤더파일은 atof()와 atol()의 함수 선언도 가지고 있다. atof()함수는 문자열을 double형 값으로 변환한다. atol()함수는 문자열을 long값으로 변환한다. 이 함수들은 atoi()함수와 비슷하게 작동한다.
strtol() : 문자열을 long형으로 변환한다.
strtoul() :문자열을 unsigned long으로 변환 한다.
strtod() : 문자열을 double형으로 변환한다.
이함수들은 문자열에서 수가아닌 첫번째 문자를 인식하고 보고한다는 것이다. 또한, strtol()과 strtoul()은 진수의 기수(number base)를 지정하는 것도 허용한다.
strtol()의 프로토 타입
long strtol(const char * nptr, char **endptr, int base);
여기서 nptr는 변환하기를 원하는 문자열을 가리키는 포인터다. endptr은 포인터의 주소다. 그 포인터는 입력한 수를 끝내는 문자, 즉 수가아닌 부분의 첫번째 문자의 주소로 설정된다. base는 그 수를 표기할 진수의 기수다.
strtol()함수는, 알파벳 'z'까지를 숫자(digit)로 사용하여, 36진수까지 처리 할 수 있다. strtoul()함수는 부호 없는 값으로 변환한다. strtod() 함수는 10진수만 처리한다.
C의 문자열은 문자 코드들을 가지는 연속된 바이트 들로 저장된다. 이 시퀀스는 널 문자로 끝난다. C는 문자열을 조작하고, 검색하고, 분석할 수 있는 유용한 문자열 처리 함수들의 라이브러리를 제공한다.
문자열을 비교할 때는 관계연산자가 아니라 strcmp()를 사용해야 한다는 것과, 문자열을 문자 배열에 대입할 때에는 대입연산자가 아니라 strcpy()나 strncpy를 사용해야 한다는 것을 기억해야한다.
strlen()함수를 사용하여 문자열 길이를 구할 때, 널문자는 카운터 되지 않는다.
함수들은 조작할 문자열을 지정하기 위해 그 문자열의 첫번째 문자를 가리키는 포인터를 사용한다. 일반적으로, 그에 해당하는 실 전달인자로 배열 이름, 포인터 변수, 큰 따옴표로 둘러싼 문자열을 사용할 수 있다. 어느 경우에나 첫번째 문자의 주소가 전달된다.
함수 atoi(), atol(), atof()는 문자열로 표현된 수를 int형, long형, double형 값으로 각각 변환한다. 함수 strtol(), strtoul(), strtod()는 문자열로 표현된 수를 long형, unsigned long형, double형으로 각각 변환한다.
'Programming > C' 카테고리의 다른 글
C언어 공부 21 (0) | 2019.05.30 |
---|---|
C언어 오목 만들기 (0) | 2019.05.29 |
C언어 공부 19 (0) | 2019.05.29 |
C언어 공부 18 (0) | 2019.05.29 |
C언어 공부 17 (0) | 2019.05.29 |