출처 : http://makerj.tistory.com/127
C++ String 정리 (C++ 문자열)
C++11 환경에서 정리한 글입니다
또한 using namespace std를 한 상태임을 밝힙니다
[string 생성]
1 >>
string myString = "abcd";
2 >>
string myString;
myString = "abcd";
중요!
1번 방식으로는 'a'와 같은 char로 생성이 불가능하다.
따라서 'a'와 같은 char로 생성하려면 2번 방식을 써야한다
string myString;
myString = 'a' ( O )
[string 확장, 문자열 추가]
string myString = "abc";이라는 문자열이 있다면
myString += "blahblah"; 와 같이 추가할 수 있다
또는
myString.append("blahblah");와 같이 추가할 수 있다
한 글자. 즉 char를 append로 확장하려면
myString.append("a"); 와 같이 하면 된다. myString.append('a');는 불가능하다
[string 길이]
string myString = "abc";이라는 문자열이 있다면
myString.size()
myString.length()
으로 문자열의 길이를 받을 수 있다.
*** size()와 length()는 결과가 완전히 동일하다
[string 길이 2]
myString.capacity()는 실제로 myString이 갖고 있는 길이를 반환한다
myString.max_size()는 myString이 최대로 갖을 수 있는 길이를 반환한다
[string의 특정 위치 문자 받기 (charAt 기능) ]
string myString = "abc";이라는 문자열이 있다면
myString.at(0) >>>>> 'a' 반환
myString.at(1) >>>>> 'b' 반환
이와같이 java의 charAt과 같은 기능을 수행한다.
[string에 있는 특정 문자 검색]
string myString = "This is my String";이라는 문자열이 있다면
myString.find("my");를 통해 "my"라는 문자열이 시작되는 위치를 반환한다
이를 활용하면
if (myString.find("my") != string::npos) {
// "my"라는 문자열을 찾았을 때의 동작
}
으로 활용 가능하다
[string간의 문자열 복사]
string myString = "acs";
string myString2 ;
myString2 = myString;
이게 다다.
myString의 문자열이 나중에 "bdjxzxddx"라고 바뀐다고 해도
myString2의 문자열은 여전히 "acs"다. 결국 myString2 에는 영향을 미치지 않는다.
[string간의 문자열 비교]
string myString = "abc";
string myStirng2 = "bbc"; 라는 문자열이 있다면
myString.compare(myString2)과 같이 비교한다.
이를 활용하면,
if (myString.compare(myString2) == 0) {
// 두 문자열이 완전히 같은 문자열일때의 처리
} else if (myString.compare(myString2) < 0) {
// myString의 문자열이 myString2보다 사전순으로 앞일 때 처리
} else if (myString.compare(myString2) > 0) {
// myString의 문자열이 myString2보다 사전순으로 뒤일 때 처리
으로 활용 가능하다.
[string의 문자열 대체하기 (replace기능) ]
//myString의 "is" 문자열을 모두 "was"로 바꾸는 예제
string myString = "that is is is man";
int pos;
string replaceString = "was";
while( (pos = myString.find("is")) != string::npos) {
myString.replace(pos,replaceString.length(),replaceString);
}
의 방법으로 대체 가능하다.
그러나 이 방법은 대체 문자가 길어지면
기존의 문자를 덮어쓰기 하면서 대체가 이루어진다
ex)
문자열이 "this is is is man" 일 때,
"is"를 위와 같은 방식으로 "asdgklsjdglsasdf"로 대체한다면
대체된 문자열은 "this asdgklsjdglsasdf"이 되어버린다
따라서 이 현상을 피해 기존의 문자열을 덮어쓰지 않고 진짜 대체만 한 구현은
아래와 같다. (제가 간단히 만든 것이므로 더 좋은 다른 구현방법이 많을 것입니다)
string myString = "that is is is cool is man";
string findString = "is";
string replaceString = "abcdef";
int pos;
while( (pos = myString.find(findString)) != string::npos){
myString.erase(pos,findString.length());
myString.insert(pos,replaceString);
}
[ 기본변수를 문자열로 ( toString 기능 ) ]
개발환경이 C++11을 지원해야함
string myString;
int myInt = 10;
myString = to_string(myInt) ;
[ 문자열을 기본변수로 ]
개발환경이 C++11을 지원해야함
string myString = "55";
int myInt ;
myInt = stoi(myString);