안녕하세요. BlockDMask 입니다.
오늘은 C언어, C++에서 해당 문자가 공백문자인지 확인하는 함수 isspace라는 함수를 가지고왔습니다.
저도 써본적은 없던것 같은데, 한번 이번 기회에 어떻게 사용하는 함수이고 어디서 쓸수있을지 한번 생각해 보았습니다.
그럼 시작해보겠습니다.
<목차>
1. isspace 함수 원형과 간단 사용법
2. isspace 함수 예제 (주의할 예제도 있어요!)
1. C/C++ isspace 함수 설명
헤더파일
C언어 : <ctype.h>
C++ : <cctype>
함수 원형
int isspace (int c);
매개변수 : 공백인지 아닌지 판단 할 값을 인자로 넣습니다.
아스키 코드에 해당하는 숫자로 들어갑니다.
문자 'b'를 넣어도 아스키코드 표에 있는 10진수 숫자 98로 int 타입으로 형변환 되어서 들어가게 됩니다.
반환형 : 공백이라면 0이 아닌 수 반환. 공백이 아닌 다른 문자라면 0 반환.
isspace 함수는 매개변수로 들어온 값이 공백인지 확인하고,
공백이면 0이 아닌 수를 반환하고,
공백이 아니라면 0을 반환합니다.
isspace가 공백이라고 판단하는 것들은 아래와같습니다.
1. " " = 공백(=스페이스)
2. "\n" = 개행
3. "\t" = 수평 탭
4. "\v" = 수직 탭
5. "\f" = 피드
6. "\r" = 캐리지 리턴
정리하면
isspace() 함수는 문자가 공백인지 탭인지 개행인지 등을 검사하는 함수 라는 것 입니다.
공백, 개행, 탭, 스페이스에 해당하면 0이 아닌 수를 반환
그렇지 않으면 0을 반환합니다.
기억하기 쉽게 0을 false와 연결하여 생각하면 좋을것 같습니다.
isspace(c)가 공백인가?? => false(0)
2. C/C++ isspace 함수 예제
2-1) isspace 공백 판단 예제1 (공백, 스페이스, 개행, 탭)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<ctype.h> #include<stdio.h> int main(void) { // 스페이스 char c1 = ' '; printf("스페이스 : %d\n", isspace(c1)); // 개행 char c2 = '\n'; printf("개행 : %d\n", isspace(c2)); // 탭 char c3 = '\t'; printf("탭 : %d\n\n", isspace(c3)); // 기타 문자들 char c4 = 'a'; char c5 = '1'; printf("기타 문자 : %d, %d", isspace(c4), isspace(c5)); return 0; } | cs |
결과를 보면 공백(스페이스), 개행, 탭이 0이 아닌 숫자를 반환하는걸 알 수 있습니다.
기타 문자들을 보면 'a', '1'과 같은 문자들은 isspace 함수의 반환 값으로 0이 나오는 것을 볼 수 있습니다.
2-2) isspace 예제2 (문자열 내부에서 공백 판단)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include<ctype.h> #include<stdio.h> int main(void) { // 공백 포함 문자열 char str[] = "I am a boy.\nblog name is BlocKDMask"; printf("%s\n\n", str); // 공백 제거 for (int i = 0; i < (int)strlen(str); ++i) { if (isspace(str[i]) == 0) { //공백이 아니면 출력 printf("%c", str[i]); } } } | cs |
결과 값에서 볼 수 있듯 이렇게 공백을 판단해서 문자열을 다룰 수 있게 되었습니다.
예제에서는 공백이 아닌 부분만 출력을했습니다.
isspace 함수를 이용해서 문자열에서 공백을 제거한 것 입니다.
2-3) isspace 주의 (빈 문자열과 스페이스)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include<ctype.h> #include<stdio.h> int main(void) { // space char c1 = ' '; printf("Space1 : %d\n\n", isspace(c1)); // space2 char c2[] = " "; printf("Space2 : %d\n\n", isspace(c2[0])); // empty char c3[] = ""; printf("Empty : %d\n\n", isspace(c3[0])); if (c3[0] == NULL) { printf("c3[0]은 NULL입니다.\n"); } else { printf("c3[0]은 NULL이 아닙니다.\n"); } return 0; } | cs |
공백(스페이스)는 ' ' 과 " " 이것 을 말합니다. 이것은 비어있는 문자열이 아니라 공백문자가 들어가있는 문자열 입니다.
그렇다면 c3인 "" 이것의 isspace 값은 무엇일까요?
헷갈릴 것 같아서 여기서 짚고 넘어가려 합니다.
char c3[] = ""; 해당 문자열의 c3[0]은 NULL이 들어가게 됩니다. 빈 문자열인 것이죠.
예제를 보면 널체크를 해보니 널 값으로 나오는 것을 볼 수 있습니다.
공백(스페이스와)과 비어있는것은 다르다는 것을 알고 넘어가셨으면 좋겠습니다.
이렇게 C, C++에서 공백(=스페이스), 탭, 개행을 판단하는 isspace 함수를 알아보았습니다.
오늘도 읽어주셔서 감사합니다.
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] for 반복문 사용법 및 예제 총정리 (5) | 2020.12.28 |
---|---|
[C언어/C++] while 반복문 설명 및 예제 (0) | 2020.12.25 |
[C언어/C++] islower, isupper 대문자 소문자 확인 (0) | 2020.12.21 |
[C언어/C++] tolower, toupper 대문자 소문자 변경 (1) | 2020.12.16 |
[C언어/C++] isalpha 함수 (알파벳을 확인하는 함수) (1) | 2020.12.03 |
[C언어/C++] 삼각함수 sin, cos, tan 함수 설명 및 예제 (라디안 포함) (1) | 2020.11.26 |
[C언어/C++] memmove 메모리 이동 함수 설명 및 예시 (0) | 2020.11.19 |
[C언어/C++] memcpy 메모리 복사 함수 설명 및 예시 (4) | 2020.11.12 |