본문 바로가기
Dev/C++

String 함수정리 C++

by HenryNoh 2020. 11. 5.

<String 함수>

- 기존 c언어의 문자열 처리에 대한 불편함을 해소하고자 c++에서는 string 클래스를 사용한다.

- 실질적으로 많이 사용되는 것은 Iterator / empty() / size() or length() / clear() / substr() / compare() / replace() / swap() / find()

  • String 선언
#include <string>

 

  • String assign (문자열 할당)
string s1 = "hello";		//hello
string s2("hello");		//hello
string s3(5,'h');		//hhhhh
string s4("hellohi",5);		//hello
string s5(`다른 string`,`시작지점`);		//시작지점부터 다른 string 복사
string s6(`다른 string`,`시작지점`,`길이`);	//시작지점부터 다른 string 길이만큼 복사

 

  • String access (문자열 접근)

- s.at(i) : i번째 주소에 접근
- s[i] : i번째 주소에 접근
- s.front() : 첫 번째 주소에 접근
- s.back() : 마지막 주소에 접근

 string s = "hello";

 s.at(0);	//h
 s[0];		//h
 s.front();	//h
 s.back();	//o

 

  • String Iterator (문자열 반복자)

- s.begin() : string의 첫 번째 주소 값 반환
- s.end() : string의 마지막+1 주소값 반환

-iterator 사용의 주의점은 주소값을 반환한다는 것과 end가 마지막+1의 주소 값을 반환한다는 것이다.-

string s = "hello";

// 유의해야할 점은 end가 문자열 마지막의 다음 주소를 가르킨다는 것이다.
string::iterator iter = s.begin();	//iter를 s의 시작지점으로 선언
for (iter; iter < s.end(); iter++) {
    cout << *iter;			//hello
}

s.begin()	//h의 주소값
s.end()		//o다음의 주소값

 

  • String Capacity (문자열 용량)

- s.empty() : string이 비었는지 판단하여 bool로 반환
- s.capacity() : string의 용량 반환
- s.length() : string의 크기 반환
- s.size() : string의 크기 반환
- s.max_size() : string의 최대 크기 반환
- s.reserve() : string의 용량 재할당

//////////////////// empty() ////////////////////
string s = "hello";
s.empty()	//false

s = ""; || s.clear();
s.empty()	//true

//////////////////// capcity() / size() / length() ////////////////////

string s = "hellohi";
s.capacity();	//15
s.length();	//7
s.size();	//7

string s = "hellohellohelloh";
s.capacity();	//31
s.length();	//16
s.size();	//16

//////////////////// reserve() / max_size() ////////////////////

s.max_size();	//4294967294 -> 최대 크기 반환

// reserve로 크기 할당 시 100만큼 더해주는 것이 아니다.
// 100에서 가장가까운 정해진 크기만큼 할당해준다.
s.reserve(100);
s.capacity();	//111
s.length();	//16
s.size();	//16

 

  • String Function1 (문자열 함수1)

- s.clear() : string 비워주기
- s.substr(index,length) : string을 index부터 length만큼 잘라서 반환
- s.replace(index,length,string2) : string을 index부터 length만큼 string2로 변환
- s.compare(string2) : string과 string2의 비교하여 사전순으로 빠르면 -1 같으면 0 느리면 1을 반환

string s = "hello";
string s2 = "aa";
string s3 = "abc";
string s4 = "ac";
string s5 = "aa";

s.substr(2,3);		// llo

s.replace(2,3,"hi");	// hehi
s.replace(2,2,"hi");	// hehio

s2.compare(s3);		// -1 (aa<abc)
s2.compare(s5);		// 0 (aa==aa)
s4.compare(s2);		// 1 (ac>aa)


s.clear();		//없음

 

  • String Function2 (문자열 함수2)

- s.swap(string1,string2) : string1과 string2를 교환 (포인터 교환)
- s.copy(arr[],length,index) : string을 index부터 length만큼 arr에 복사후 / 실제 복사된 길이 반환
(c언어 문자열로 복사시 마지막에 \0 필수로 추가)
(arr의 길이를 반환한다)
- s.find(string2,index) : string에 string2가 있는지 찾아서 있으면 0 // string에 index부터 string2가 있는지 찾아서 위치 반환

char ar[10];
int len;
string s1 = "hello";
string s2 = "el";

len = s1.copy(ar,3,1);	// len:3
a[len] = '\0';		// 필수로 추가해주어야한다.
ar;			// ell

s1.find(s2);	// 1 (el이 시작하는 위치 반환)
s1.find(s2,1);	// 1 (index1부터 el을 찾으면 1에 있음)
s1.find(s2,2);	// ? (index2 부터는 el이 없기 때문에 이상한 값 반환)

swap(s1,s2);	// s1:el / s2:hello

 

  • String Function3 (문자열 함수3)

- s.push_back(char c) : string뒤에 문자 추가
- s.pop_back() : string가장 뒤에 있는 문자 하나를 제거
- s.c_str() : c++ string 문자열을 c언어 char[] 문자열로 변환

string s = "hello";

s.push_back('h');	// helloh
s.pop_back();		// hello

const char *ar;		//(const char형식으로 선언 해주어야 한다.)
ar = s.c_str();		// hello (쓸 일은 거의 없을 것 같다.)

'Dev > C++' 카테고리의 다른 글

Map 함수정리 C++  (0) 2021.04.07
Vector 함수정리 C++  (0) 2020.11.11

댓글