레필리아
String 관련 자작함수
레필리아
레필리아의 잡동사니
레필리아
전체
오늘
어제
  • 전체보기 (151)
    • 개발 공간 (1)
      • 매크로 (1)
    • 컴퓨터공학 리서치 (23)
      • 공개 (23)
      • 비공개 (0)
    • 컴퓨터공학 기초 (70)
      • Computer architectur.. (0)
      • Embedded system (6)
      • Operating system (0)
      • Database (2)
      • C.C++ (32)
      • Network (0)
      • Java (12)
      • 문제 풀이 (18)
    • 창고 (57)
      • 미분류 (57)
      • 유틸리티 (0)
      • 쓰레기통 (0)
      • ESLAB (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • MSP430F5437

최근 댓글

최근 글

hELLO · Designed By 정상우.
컴퓨터공학 기초/C.C++

String 관련 자작함수

2011. 10. 14. 23:31

stl에서 제공하는 string 클래스에는 다소 빠진 기능이 존재합니다. 가령, 문자열의 시작과 끝의 공백문자를 제공하는 Trim 류 함수나 문자열을 대문자 나 소문자로 변경해주는 함수들이 그것입니다.

기존의 자바의 String이나 MFC의 CString을 사용해본 사용자들은 이런기능이 없는것에 대해 아쉬움을 느끼게 되는데요. 다음은 이러한 부족한 기능들을 직접 구현한 논것 입니다.

#include 
#include 
#include 
#include 
using namespace std;

// 문자열의 오른쪽과 왼쪽 공백문자 제거
std::string Trim(const std::string& s)
{
	if (s.length() == 0)
		return s;

	int f = s.find_first_not_of(" ");
	int e = s.find_last_not_of(" ");

	if (f == string::npos)
		return "";

	return std::string(s, f, e - f + 1);
}

// 문자열의 왼쪽 공백문자 제거
std::string TrimLeft(const std::string& s)
{
	if (s.length() == 0)
		return s;

	int f = s.find_first_not_of(" ");

	if (f == string::npos)
		return "";

	return std::string(s, f);
}

// 문자열의 오른쪽 공백문자 제거
std::string TrimRight(const std::string& s)
{
	if (s.length() == 0)
		return s;

	int e = s.find_last_not_of(" ");

	if (e == string::npos)
		return "";

	return std::string(s, 0, e + 1);
}

// 문자열을 대문자로 변환해주는 함수
std::string ToUpper(const std::string &s)
{
	std::string t;

	char* buf = new char[s.length()];

	s.copy(buf, s.length());
	for (int i = 0; i < s.length(); i++)
	{
		buf[i] = toupper(buf[i]);
	}

	t = std::string(buf, s.length());
	delete buf;

	return t;
}

// 문자열을 소문자로 변환해주는 함수
std::string ToLower(const std::string &s)
{
	std::string t;

	char* buf = new char[s.length()];

	s.copy(buf, s.length());
	for (int i = 0; i < s.length(); i++)
	{
		buf[i] = tolower(buf[i]);
	}

	t = std::string(buf, s.length());
	delete buf;

	return t;
}

// 문자열을 16진수로 변환
bool StrToHex(long& hex, const std::string& str)
{
	if (str.empty())
		hex = 0;
	else
	{
		char *stopstring;
		hex = strtol(str.c_str(), &stopstring, 16); //16은 16진수를 의미
	}

	return true;
}

// sprintf 구현
#define _MAX_CHARS 8000
int Format(std::string& txt, const TCHAR* szFormat, ...)
{
	std::vector _buffer(_MAX_CHARS);
	va_list argList;
	va_start(argList,szFormat);

#ifdef _UNICODE
	int ret = _vsnwprintf(&_buffer[0],_MAX_CHARS,szFormat,argList);
#else
	int ret = _vsnprintf(&_buffer[0], _MAX_CHARS, szFormat, argList);
#endif
	va_end(argList);

	txt.assign(&_buffer[0], ret);

	return ret;
}

int main()
{
	std::string str = " When one door of happiness closes, another opens ";

	cout << str << "." << endl;
	cout << Trim(str) << "." << endl;
	cout << TrimLeft(str) << "." << endl;
	cout << TrimRight(str) << "." << endl;
	cout << ToUpper(str) << "." << endl;
	cout << ToLower(str) << "." << endl;

	long lnum = 0l;
	StrToHex(lnum, "0xAB");
	cout << "0xAB " << lnum << endl;

	Format(str, "eleven is %d", 11);
	cout << str << endl;

	return 0;
}

'컴퓨터공학 기초 > C.C++' 카테고리의 다른 글

string split 함수 (stl vector)  (0) 2013.04.26
virtual 응용(원리, 다중상속)  (0) 2012.05.09
알고리즘 실습 모음 (링크)  (0) 2011.09.16
STL - 결합 컨테이너  (1) 2011.09.16
STL - copy()와 특별한 이터레이터  (0) 2011.09.16
'컴퓨터공학 기초/C.C++' 카테고리의 다른 글
  • string split 함수 (stl vector)
  • virtual 응용(원리, 다중상속)
  • 알고리즘 실습 모음 (링크)
  • STL - 결합 컨테이너
레필리아
레필리아
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.