<개인공부>/[C언어, C++]

[C언어/C++] isspace 함수 (공백, 탭, 개행을 확인하는 함수)

BlockDMask 2020. 12. 10. 00:30
반응형

안녕하세요. 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 함수를 알아보았습니다.
오늘도 읽어주셔서 감사합니다.

반응형