반응형

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