반응형

출처 : 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);

+ Recent posts