c언어/워딩(미정리)

문자열의 구분 및 문자 처리 함수

도솔비 2019. 7. 8. 15:32

들어가기에 앞서 복습

요번, 다음 강의인 12, 13장은, 깊이 파고들만한 중요한 내용이 아니고, 이런 것이 있는 것을 알아보는 수준이다. 그래도 아직 중요한 내용은 뒤에 많이 남았으니, 끝까지 집중해서 공부하도록 하자. 영상에서 들어가는 복습도 확실히 하자.

복습하자면, 자료형은 정수와 실수로 나뉘고, 정수에는 char, short, int가 있고, 실수는 float, double가 있었다. 여기서 중요한 것은 char는 문자로 ASCII(아스키코드)인데, 이때 문자의 본질이 정수라는 것이다. 이 문자 상수의 char‘A'int로 표현하면 65가 된다. 이 둘이 같은 정수계열의 자료형이다.

 

문자열과 문자열 상수

그럼 문자열이란 뭘까? 문자열 상수는 있나? 답은 없다. 문자열상수라고도 볼 수 있기는 하지만(읽기전용이다 보니까), 문자열 상수의 본질은 배열이라고 보면 된다. 배열을 보면 char 이름[요소]와 같이 돼있는데, 여기서 이름이 없이, char[요소]와 같은 경우가 문자열(문자열 상수라고 봐도 되긴 한다)이 된다. 그러니까 "Hello"와 같은 경우다. 이 경우, 배열의 이름이 없지만, 주소는 있다. 문자열의 맨 앞(H같이)글자로 주소를 가지고 있고, 그렇게 식별한다.

알아둘 것은 문자열의 본질이 배열이라는 점과, 문자열의 맨 끝자리는 0이 오는 것 쯤 되겠다.(잊지도, 헷갈리지도 말자)

 

MBCS & Unicode(유니코드)

문자는 영문은 1byte, 한글 등은 2byte가 된다. 그렇기에 char자료형으로 하면, 같은 7byte라고 해도 영문은 문자열 6글자를 쓸 수 있지만,(맨 뒤의 0을 포함해서) 한글은 3글자 밖에 쓰지를 못한다. 이것을 Multi-bytes character sets라고 한다. 이것의 반대가 흔히들 알고 있는 유니코드다. Unicode character sets라고 부르는데, 이것은 영문이든 한글이든 2byte를 동일하게 가진다. 영문은 1byte이니 여기에 1byte널 문자(0)’를 넣어서 모두 2byte가 된다. 이때의 자료형은 wchar_t, short자료형이라고 알아도 된다(2바이트 자료형) 그래서 마지막의 널 문자는 두 개가 들어간다.(/0 + /0) 끝까지 2byte가 들어가게 된다.

 

1, ‘1’, “1”

다 같은 1이지만, ‘ ’, “ ”에 따라서 각각 숫자, 문자, 문자열이 된다. 짚고 넘어갈 이야기 인데, 1int4byte로 숫자 값이 되고, ‘1’char1byte로 문자가 되고, “1”char[2], 2byte로 문자 + 0(널 문자)해서 문자열이 된다. 물론 자료형이 char일 경우에 한해서다. “1”이 유니코드로 쓰일 경우, wchar_t[2]로 총 4byte가 된다.

< 다음 장 계속 >

 

문자처리함수

isalpha()라는 함수는 A~Z,a~z에 속하는 알파벳이 아닌지 검사하는 함수다. 이것은 조건을 만족하면 0이 아닌 값을 반환 하고, 매개변수는 검사할 문자(변수).

isdigit()도 비슷한 함순데, 여기서 매개변수와 반환 값은 똑같지만, 검사하는 것은 0~9에 속하는 숫자이다. (10진수인지 아닌지를 보는 함수다)

isxdigit()는 위 함수에 x가 붙은 함수로, 0~9, a~f, A~F에 속하는 숫자를 검사한다.

매개변수와 반환 값은 똑같다.(16진수인지 아닌지를 보는 함수다)

isalnum()이란 함수도 있다. 이것은 0~9, A~Z, a~z에 속하는 문자를 검사한다. (영문자나 숫자를 보는 함수다)매개변수와 반환 값은 모두 똑같은 형식이다.

islower()는 소문자(a~z)인지, isupper()는 대문자(A~Z)인지 검사하는 함수다.

isspace()는 자주 쓰이는 중요한 함수인데, 화이트 스페이스(0×09~0×0D, 0×20)에 대한 문자인지 검사하는 함수다. , 빈칸, 스페이스 키가 여기에 걸린다.

toupper()는 위와 다르게 영문 소문자를 대문자로 변환하는 함수다. 소문자를 매개변수로, 대문자를 반환 값으로 내놓는 특징이다.