본문 바로가기

C++

String 메서드

String 에서 사용할 다양한 메서드의 정리

 

총 정리집

 #include <bits/stdc++.h>
 using namespace std;
 int main(){
 string a = "love is";
 a += " pain!";
 a.pop_back();
 cout << a << " : " << a.size() << "\n";
 cout << char(* a.begin()) << '\n';
 cout << char(* (a.end()-1)) << '\n';
 // string& insert (size_t pos, const string& str);
 a.insert(0, "test ");
 cout << a << " : " << a.size() << "\n";
 // string& erase (size_t pos = 0, size_t len = npos);
 a.erase(0, 5);
 cout << a << " : " << a.size() << "\n";
 // size_t find (const string& str, size_t pos = 0);
 auto it = a.find("love");
 if (it != string::npos){
 cout << "포함되어있다." << '\n';
 }
 cout << it << '\n';
 cout << string::npos << '\n';
 // string substr (size_t pos = 0, size_t len = npos) const;
 cout << a.substr(5, 2) << '\n';
 40
return 0;
 }
 /*
 love is pain : 12
 l
 n
 test love is pain : 17
 love is pain : 12
포함되어있다.
 0
 18446744073709551615
 is
 *

 

 


 

+=

문자열을 더할 때 보통 +=을 써서 문자열 또는 문자를 더한다.

 

push_back()

vector의 push_back()과는 비슷하지만 다르다.

string의 push_back()은 문자 하나씩 밖에 넣을 수 없다.

#include <bits/stdc++.h>
 using namespace std;
 int main() {
 string s = "Hello";
 s.push_back(' ');
 s.push_back('W');
 s.push_back('o');
 s.push_back('r');
 s.push_back('l');
 s.push_back('d');
 cout << s;
 return 0;
 }

 

begin()

문자열의 첫번째 요소를 가리키는 이터레이터를 반환한다. 이 이터레이터를 기반으로 포인터를 통해 해당 위치의 값을 가져올 수 있다.

 

end()

문자열의 마지막 요소 그 다음을 가리키는 이터레이터를 반환한다.

따라서, a.end() - 1 의 형식을 사용하여 마지막 문자열을 호출할 수 있다.

begin(), end()는 자료구조인 vector, Array, 연결리스트, 맵, 셋에서도 존재하여 똑같은 의미를 지닌다.

 

size()

문자열의 사이즈를 반환한다. O(1)의 시간복잡도를 가진다.

 

insert(위치, 문자열)

특정 위치에 문자열을 삽입한다. O(n)의 시간복잡도를 가진다.

 

erase(위치, 크기)

특정 위치에 크기만큼 문자열을 지운다.

 

pop_back()

문자열의 끝을 지운다.

 

find()

특정 문자열을 찾아 위치를 반환한다. 만약 문자열을 찾지 못하는 경우 string::npose 을 반환하며 O(n)의 시간복잡도를 가진다.

string::npos는 size_t 타입의 최대값을 의미한다.

 

substr(위치, 크기)

특정 위치에서 크기만큼의 문자열을 추출한다. O(n)의 시간복잡도를 가진다.

크기를 넣지 않는다면, 위치로부터 문자열 가장 끝까지의 문자열을 추출한다.

 #include<bits/stdc++.h>
 using namespace std;
 int main()
 {
 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
 string a = "aaabbb";
 string b = a.substr(2);
 cout << b << "\n"; // abbb
 return 0;
 }

 

 

split()

vector<string> split(string input, string delimiter)
{
    vector<string> ret;
    long long pos = 0;
    string token = "";
    while(((pos = input.find(delimiter)) != string::npos))
    {
        token = input.substr(0, pos);
        ret.push_back(token);
        input.erase(0,pos + delimiter.length());
    }
    ret.push_back(input);
    return ret;
}

int main()
{
    string s = "안녕하세요";
    string d = " ";
    vector<string> a = split(s, d);
    for(string b : a) cout << b << "\n";

}

 

위의 코드를 분석하자면,

 while ((pos = input.find(delimiter)) != string::npos)

while()문에서 input 에서 delimiter를 찾을때까지 루프가 반복됩니다.

 

 token = input.substr(0, pos);

 

string token에 pos 만큼 반환하게 되고, substr()을 하기 때문에 token에 문자열 0~ pos 만큼 추출하게 된다.

 

 

 ret.push_back(token);

추출한 문자열을 ret vector배열에 삽입하게 된다.

 

그리고 앞에서부터 문자열을 지우고, delimter의 사이즈만큼 문자열을 제거해 뒤에 뒷 문자열이 남게 된다.

 

 

더 빠른 spilt()

앞서 설명한 spit()에서는 erase를 수행하기 때문에 시간초과를 경험할 수 있다.

따라서 아래와 같은 형태도 기억하면 좋다.

 vector<string> split(const string& input, string delimiter) {
 vector<string> result;
 auto start = 0;
 auto end = input.find(delimiter);
 while (end != string::npos) {
 result.push_back(input.substr(start, end- start));
 start = end + delimiter.size();
 end = input.find(delimiter, start);
 }
 48
result.push_back(input.substr(start));
 return result;
 }

 

atoi(s.c_str)

문자열 s를 정수 int롤 변환하는 방법

#include <bits/stdc++.h>
 using namespace std;
 int main(){
 string s = "1";
 string s2 = "amumu";
 cout << atoi(s.c_str()) << '\n';
 cout << atoi(s2.c_str()) << '\n';
 return 0;
 }

 

 

 

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

범위지정 연산자  (1) 2024.09.18
함수 오버로딩  (1) 2024.09.18
개행 문자 입력 방식  (0) 2024.05.24
Fill 함수  (0) 2024.03.26
표준 템플릿 라이브러리  (0) 2024.03.18