반응형

cpp string function

include <string>


+타입 변환

stod(), stof(), stoi, stol, stold, stoll, stoul, stoull

double(8), float, 

int(4), long(4 or 8),

 long double(16) ,

 long long(8), unsigned long, unsigned long long

format string: %f, %f, 

%d, %ld, 

%Lf, 

%lld, %lu, %llu


double stod(const string &str, size_t *idx=0) ;

double stod(const wstring &str, size_t *idx=0) ;

스트링을 더블 타입으로 파싱하여 리턴한다. 

idx가 주어지면, 숫자 파싱한 다음 처음 수가 아닌 문자의 위치 인덱스를 할당한다.

ex)

std::string orbits("365.24 29.53") ;

std::string::size_type sz ;

double earth = std::stod(orbits, &sz) ;        // sz는 6. (공백위치)

double moon = std::stod(orbits.substr(sz)) ; // " 29.53"을 파싱. 


long long stoll(const string& str, size_t* idx=0, int base=10) ;  // wstring also.

base는 진법. 0이면 포맷에 따라 자동 판단.  

std::string str="8245821 0xffff 020" ;

std::string::size_type sz=0 ;

while(!str.empty()) {

long long ll = std::stoll(str, &sz, 0) ;

str = str.substr(0, sz) ;

}

10진수, 16진수, 8진수로 판단 : 84245821,   65535,  16


int i_dec=std::stoi("2001,A Space", &sz) ;        // 2001

int i_hex = std::stoi("40c3", nullptr, 16) ;        // 16579

int i_bin = std::stoi("-10010110001", nullptr, 2) ;    // -1201   ; 10010110001(2) = 1201

int i_auto = std::stoi("0x7f", nullptr, 0) ;    // 127


++ 문자열로 변환

std::to_string,   to_wstring

std::string pi = std::to_string(3.1415926) ;



++ getline

스트림에서 스트링으로 라인을 읽음.


istream& getline(istream& is, string& str, char delim) ;    // (delim은 생략 가능)

is 스트림에서 문자열을 추출하여 str로 넘긴다.  딜리미터가 발견되거나 new line이나 파일 끝일 때까지.

delimiter가 발견되면, 딜리미터는 버린다. 

#include <iostream>

#include <string>


std::string name ;

std::getline(std::cin, name) ;


++std::operator >> (string)

스트림에서 문자열을 추출한다.

std::cin >> name ;

std::cout << name ;










'Develop > C&CPP' 카테고리의 다른 글

algorithm 1. test, find, count, search, foreach  (0) 2018.06.01
numeric: accumulate, adjacent_difference, inner_product, partial_sum  (0) 2018.06.01
string  (0) 2018.05.30
map  (0) 2018.05.29
List 1  (0) 2018.05.28
반응형

+감사로그에서 초 단위로 발생한 로그 개수 조회.

mysql

LOG_DATE 형식 VARCHAR2로 yyyy-mm-dd hh:mm:ss.sss

LOG_DATE에서 처음부터 19자까지만 얻어와서 그룹별로 카운팅.

카운트로 내림차순으로 정렬.


select * from (

select substr(LOG_DATE, 1, 19) as d, count(*) as cnt from AUDIT_LOG group by substr(LOG_DATE, 1, 19) ) A

order by cnt desc ;



반응형

cpp string

#include <string>


+초기화

std::string s0("initial string") ;

std::string s1 ;

std::string s2(s0) ;

std::string s3(s0, 8, 3) ;    // index 8에서 3글자. => str

std::string s6(10, 'x') ;    // xxxxxxxxxx

std::string s7b(s0.begin(), s0.begin()+7) ;   // initial


+이터레이터 ; begin(), end(), rbegin(), rend(), c*


+용량

size() ; 스트링 길이 (char 수)

length() ; 스트링 길이

reserve(size_type n) ; capacity 변경. 기존 길이보다 작게 설정하면 작동하지 않는다. 기존 스트링의 내용이나 길이를 변경하지는 않는다. 

resize(size_type n) ; 크기 리사이즈. 스트링 길이보다 작으면 해당 길이로 줄어들고, 스트링 길이보다 크면, 나머지 부분에는 디폴트로 null 이 채워지고, 특정 문자로 지정하면 해당 문자들이 채워진다.

capacity() ; 메모리 할당 크기. 스트링 길이 이상이며  스트링 길이와 같지 않을 수 있다. (보통 더 크다.)

clear() ; 내용 모두 삭제. 길이가 0으로 된다. 

empty() ; empty check. 스트링 길이가 0이면 true, 아니면 false.


+c_str()

null terminated 문자열 시작 주소를 리턴한다. 

std::string str("hello world") ;

char *cstr = new char[str.length()+1] ;

std::strcpy(cstr, str.c_str()) ;

delete [] cstr ;


+data()

c_str() 과 동일


+[] operator ; char array index로 접근


+copy()

현재 스트링의 일부를 목적지 주소로 복사한다.  리턴값은 복사된 길이.

copy(charT *s, size_type len, sizt_type pos=0) ;

char buf[20] ;

std::string str("Test string...") ;

std::size_type len = str.copy(buf, 6, 5) ;    // str의 index 5부터 6개를 복사.

buf[len]='\0' ;    // null add.

buf -> "string"


+substr() ; 문자열 일부를 복사하여 얻어온다.

문자열 일부를 새로운 string객체로 만들어 리턴한다.

substr(size_type pos=0, size_type len=npos) ;  // 시작 위치, 길이

길이를 생략하면 끝까지 복사.

std::string str2 = str.substr(12, 12) ;    // index 12에서 12문자 복사.

std::string::size_type pos = str.find("live") ;    // live 문자열 시작 위치 인덱스.

std::string str3 = str.substr(pos) ;    // live부터 끝까지 복사된 객체 생성.


+replace() ; 문자열의 일부를 변경한다.

replace(시작위치, 길이, 대체할 문자열) ; 시작위치부터 해당 길이 부분을 대체한다.

시작위치, 길이를 이터레이터로 대체할 수 있다.

replace(시작위치, 길이, 대체할 문자열, 대체문자열의 시작위치, 대체문자열의 길이)  ; 대체문자열에서 일부를 잘라 그것으로 교체한다.

replace(pos, len, char *)

replace(i1, i2, char*)

replace(pos, len, size_type n , charT c) ;  // 대체할 문자열을 지정한 문자 n개로 한다.

replace(i1, i2, first, last) ;    // 모두 이터레이터로 파라미터를 제공.


+append() ; 문자열 추가

append(string& str) ;

append(string &, subpos, sublen) ; // 추가할 문자열의 일부분 지정 가능 (시작위치, 길이)

append(char* )

append(char *, n) ;

append( n, char) 

append(first, last)   // 이터레이터로 추가할 문자열 범위 지정.

+= operator를 사용하여 추가도 가능하다. 

+= operator는 파라미터로 string, char*, char 가능.

std::string name("John") ;

std::string family("smith") ;

name+=" K. " ;

name+=family ;

name+='\n' ;


+find(needle, start, length)

문자열 검색하여 처음 발견된 위치를 리턴. pos 위치 지정하면 해당 위치부터 검색.

없으면 std::string::npos 리턴

std::string::size_type f = str.find(str2) ;    // str에서 str2가 처음 발견된 index 리턴.

f=str.find(str2, f+1)    // 위에서 발견한 다음 인덱스부터 검색.

f=str.find(str2, f+1, n)    // 위에서 발견한 다음 인덱스부터 검색하는데 str2의 n길이 만큼만 비교.


+rfind()

뒤에서 부터 검색.

뒤에서 부터 검색해서 sixth를 찾아 seventh로 변경

std::string key("sixth") ;

std::string::size_type f = str.rfind(key) ;

if (f!=std::string::npos) 

    str.replace(f, key.length(), "seventh") ;


+find_first_of() 

문자열 중에 아무거나 먼저 발견된 곳을 찾는다.

f=str.find_first_of("aeiou") ;    // 앞에서 부터 먼저 나온 모음 위치 인덱스를 리턴.

f=str.find_first_of("aeiou", f+1) ; // 발견된 다음 위치부터 다시 검색.

find_last_of()

find_first_not_of()

find_last_not_of()












'Develop > C&CPP' 카테고리의 다른 글

numeric: accumulate, adjacent_difference, inner_product, partial_sum  (0) 2018.06.01
string function  (0) 2018.05.31
map  (0) 2018.05.29
List 1  (0) 2018.05.28
Array 1  (0) 2018.05.25

+ Recent posts