안녕하세요~
C언어 함수 관련 포스팅은 오랜만이군요 ㅎㅎ
그동안 바빠서 블로그 관리를 하지 못했다가 최근들어 차츰차츰 해보려고 해요.
오늘은 그 많고 많은 함수 중 isspace해 작성해보려고 합니다.
공백, 탭 등등 이런 문자들을 whitespace라고 하는데 이 함수는 whitespace인지 아닌지를 판단해줘요.(whitespace라는 언어도 있음..)
whitespace를 판별해주는 함수 isspace
whitespace의 종류?
그럼 어떤 문자가 whitespace에 해당이 될까요?
문자 | 헥사값 | 코드 | 뜻 |
' ' | 0x20 | SPC(SP) | 스페이스 , 공백 |
'\n' | 0x0a | LF | 라인피드 |
'\t' | 0x09 | TAB(아스키코드상 HT) | 수평 탭 |
'\v' | 0x0b | VT | 수직 탭 |
'\f' | 0x0c | FF | 폼 피드 |
'\r' | 0x0d | CR | 캐리지리턴 |
판별하고자 하는 문자가 요 종류인지 아닌지 알려줍니다.
헤더파일
#include <ctype.h>
ctype헤더에는 이런 판별함수들이 많은데요.
많이 쓰는걸로는, isalpha, isdigit, isalnum 등이 있습니다. 함수명만 봐도 추측할 수 있듯이 각, 알파벳인지 판별하는, 숫자형문자인지 판별하는,, 알파벳또는 숫자인지 판별하는 기능을 합니다.
함수 프로토타입
int isspace ( int c );
인자
int c : 판별할 문자
리턴값
만약 인자에 있는 값이 whitespace에 해당되면 0이 아닌 값을 리턴하고
whitespace가 아니면 0을 리턴한다.
쉽게 생각해서 is space? 너는 스페이스냐? 스페이스가 아냐. --> false (0)리턴, space면 0이 아닌 값을 리턴.
사용 예시
간단한 사용법.
#include <ctype.h>
#include <stdio.h>
int main()
{
char ch = ' ';
if (isspace(ch))
printf("\nEntered character is space");
else
printf("\nEntered character is not space");
}
쉽죠 ?
좀 응용해서, whitespace를 다 제거하는 함수를 만들어보기
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void remove_spaces(char *s);
int main() {
char s[100] = "H a p p y New Year !";
remove_spaces(s);
printf("%s", s);
return 0;
}
void remove_spaces(char* s) {
char* d = s;
do {
while (isspace(*d)) {
++d;
}
*s++ = *d++;
} while (*s != '\0');
}
C++에서 문자열이 space만으로 구성되어 있는지 확인하는 법
bool whiteSpacesOnly = std::all_of(s.begin(),s.end(),isspace);
string 클래스의 begin함수와 end함수의 경우에는 아래 포스팅을 참조해주세요! :)
[C++]string 총정리 2탄(clear, empty, 문자열 추출 substr, 반복자 begin/end, 변경 replace, 제거 erase)
[C언어, C++언어, Java언어 기초 프로그래밍 완전 정복 목차!] [C++] 저번 포스팅에서 String 사용하는 법 1탄을 살펴봤어요. 총정리가 뭔가 깔끔한거같아서 제목은 바꿨지만 저번 String 포스팅에 이어서 기능들..
jhnyang.tistory.com
isspace() 변형
[공백과 탭만 체크하는 isspace 구현해보기]
bool isspace(int c)
{
return c == ' ' || c == '\t';
}
이 함수는 당연히 리턴타입이 bool이니까 0또는 1만 나오겠죠. 공백이거나 탭이면 true리턴~! 위처럼 함수로 구현할 수도 있고 아래처럼 매크로로 구현할 수도 있어요.
#define IS_SPACE(x) ((x) == ' ' || (x) == '\t')
구현하기는 어렵지 않습니다.
주의할 점
흔히 하는 실수~
if(isspace(req_data.first) != true)
{
printf("is space가 true가 아니야. 공백이 아닐때 여기를 타겠지?");
}
else
{
printf("공백이야");
}
true가 기준이 아니라 false가 기준이예요! 리턴 값이 0과 1 두 값 중에 하나인게 아닙니다.
해당 문자가 whitespace인데 리턴값이 1이 아니라 524일 수도 있어요. 그래서 공백인데도 첫번째 분기문을 탈 수 있습니다. 즉 whitespace가 있으면 0만 아닌거.
if(isspcae(req_data.first) == false)
{
printf("first글자는 whitespace가 아니야");
}
else
{
printf("first글자는 whitespace야");
}
이렇게 짜야 맞습니다.
오늘은 여기까지입니다! 도움이 되셨다면, 공감, 댓글 광고보답은 어떤가요? 정보공유에 힘이 됩니다.
그럼 다음 포스팅에서 뵈어요~~
최신 댓글