-
[c++] trim( ), 공백, 개행, 탭 제거 (whitespace 제거)Programming/c++ 2023. 6. 15. 14:06728x90
java에서는 trim( ) 함수를 제공하지만 C++에서는 boost 라이브러리 사용하지 않으면 제공하지 않습니다.
그래서 trim( )처럼 사용하기 위한 예제들을 포스팅하겠습니다~
문자열의 왼쪽(선행), 오른쪽(후행)에 whitespace가 있다면 제거하는 방법입니다.
Whitespace
문자유니코드이름약칭U+0020spaceSPC\tU+0009horizontal tabTAB\nU+000AnewlineLF\vU+000Bvertical tabVT\fU+000CfeedFF\rU+000Dcarriage returnCRASCII Code
이름 10진 16 문자 horizontal tab 9 0x09 HT newline 10 0x0A LF vertical tab 11 0x0B VT feed 12 0x0C FF carriage return 13 0x0D CR space 32 0x20 SP 1. find_first_not_of( ), find_last_not_of( )
string 변수에 삭제하려고하는 whitespace를 선언하여 사용합니다.
#include <algorithm> const std::string WHITESPACE = " \n\r\t\f\v"; std::string ltrim(const std::string &s) { size_t start = s.find_first_not_of(WHITESPACE); return (start == std::string::npos) ? "" : s.substr(start); } std::string rtrim(const std::string &s) { size_t end = s.find_last_not_of(WHITESPACE); return (end == std::string::npos) ? "" : s.substr(0, end + 1); } std::string trim(const std::string &s) { return rtrim(ltrim(s)); } int main() { std::string s = "\n\tHello World \r\n"; printf("[%s]", trim(s).c_str()); return 0; }
[Hello World]
2. std::isspace
헤더 파일
#include <cctype>
함수 프로토타입
int isspace(char c)
return
0 : whitespace아님 whitespace 해당 ascii 10진수 값
예제
#include <iostream> #include <cctype> #include <string> std::string trim(const std::string &s) { auto start = s.begin(); while (start != s.end() && std::isspace(*start)) { start++; } auto end = s.end(); do { end--; } while (std::distance(start, end) > 0 && std::isspace(*end)); return std::string(start, end + 1); } int main() { std::string s = "\n\tHello World \r\n"; printf("[%s]", trim(s).c_str()); return 0; }
[Hello World]
3. std::regex_replace
헤더 파일
#include <regex>
예제
#include <regex> std::string ltrim(const std::string &s) { return std::regex_replace(s, std::regex("^\\s+"), std::string("")); } std::string rtrim(const std::string &s) { return std::regex_replace(s, std::regex("\\s+$"), std::string("")); } std::string trim(const std::string &s) { return ltrim(rtrim(s)); } int main() { std::string s = "\n\tHello World \r\n"; printf("[%s]", trim(s).c_str()); return 0; }
[Hello World]
728x90'Programming > c++' 카테고리의 다른 글
[c++] std::move (1) 2023.10.20 [C++] 공용체 Union (0) 2023.09.13 [c++] multiset (0) 2023.02.12 [c++] priority_queue (0) 2023.02.12 [c++] 2진수 1의 개수 세기 (0) 2023.02.05