using namespace std 를 한 상태로 작성하였습니다.
std::string 을 간략하게 정리합니다.
string 함수 정리
C에서는 문자열을 char형 배열을 사용하거나 포인터를 사용하고, 문자열 끝에 '\0'을 넣는 방법으로(char[], char*) 지원한다. 하지만 C++에서는 string 이라는 클래스를 자체적으로 제공하고 있다.
C++의 문자열을 사용하려면 먼저 std::string을 사용하기 위해 #include < string > 을 선언해야한다. 이 작업이 완료되면 std::string 타입의 변수를 정의할 수 있다.
string myString = "abcd";
string myString;
myString = "abcd";
string str(myString);
stirng str("helloworld");
string base = "hello world!";
base += "x";
string base = "hello world";
base.append("appended!");
string base = "hello world";
base.length();
base.size();
size()와 length()는 이름만 다를 뿐 같은 일을 하는 멤버변수다.
string base = "hello world";
base.capacity()
capacity()는 해당 문자열이 재할당을 하지 않고도 저장할 수 있는 문자열의 길이를 반환한다.
문자열은 문자열이 늘어났을 때, 현재 capacity보다 클 경우 더 큰 메모리를 사용할 수 있도록 재할당된다.
string base = "hello world!";
base.max_size()
max_size()는 최대한 메모리를 할당했을 경우, 저장하 수 있는 문자열의 길이를 반환한다.
string base = "hello world!";
base.at(0); // 'h'
base.at(1); // 'e'
해당 위치의 char을 반환한다.
string base = "hello world!"l
base.find("world");
world! 문자열이 발견된 첫 위치를 반환한다.
if(base.find("world") != string::npos) {
// "world!" 라는 문자열을 찾았을 때의 동작
}
탐색에 실패할 경우는 if문에서 볼 수 있듯이 string::npos를 반환한다.
string src = "I am source :)" ;
string dst;
dst = src;
dst에는 같은 내용이 복사되어 들어간다.
얕은 복사가 아니다. 깊은 복사다.
즉, 복사 후에 src의 내용이 변경된다고 해도 dst의 내용에는 아무 영향을 미치지 않는다.
stirng a = "I am string one! :)";
string b = "string";
if(a.compare(b) == 0){
//두 문자열이 같을 때
}
else if(a.compare(b) < 0){
//a가 b보다 사전 순으로 앞일 때
}
else if(a.compare(b) > 0{
//a가 b보다 사전 순으로 뒤일 때
}
http://stackoverflow.com/a/14678964/2050087 참조
문자를 다른 타입으로 변경해야 할 필요가 있는 경우는 흔하다.
그래서 c++11에 들어 표준 라이브러리에 기본적인 타입 변환 기능이 추가됐다.
// int -> string
string s;
int i = 10;
s = std::to_string(i);
//string -> int
string s = "123";
int i;
i = std::stoi(s);