char*
, char[]
과 다르게 문자열의 끝에 ‘\0’이 들어가지 않고, 문자열의 길이를 동적으로 변경 가능하다.#include <string>
header를 추가해서 사용한다.빈 문자열 s 생성
string s;
“abc”로 선언된 s 생성
string s = “abc”;
string s; s = “abc”;
string s(”abc”);
“abc”로 s 동적할당
string *s = new string(”abc”);
문자열 s를 copy한 t 생성
string t(s);
#include <iostream>
#include <string>
using namespace std;
int main() {
string a = "a";
string b = "b";
cout << (a < b); // output:1 - 괄호 주의
cout << (a == b); // output:0 - 괄호 주의
string c = a + b;
cout << c; // output:"ab"
c.push_back('c');
cout << c; // output:"abc"
}
s.compare(t)
문자열 s와 문자열 t가 같은지 비교해서
s == t : 0 반환 / s > t : 양수 반환 / s < t : 음수 반환
swap(s, t)
문자열 s, t의 reference를 교환해서 swap
s.at(index) | index 위치의 문자 반환 / 유효한 범위인지 체크 O | |
s[index] | index 위치의 문자 반환 / 유효한 범위인지 체크 X / at보다 접근이 빠름 | |
s.front() | 문자열의 가장 앞 문자 반환 | |
s.back() | 문자열의 가장 뒤 문자 반환 | |
s.begin() | 문자열의 첫번째 요소를 가리키는 iterator | O(1) |
s.end() | 문자열의 마지막 요소 다음을 가리키는 iterator | O(1) |
s.length() | 문자열 길이 반환 - 문자를 셈, 문자열의 길이에 비례해 시간 소요 | O(N) |
s.size() | 문자열 길이 반환 - 컨테이너 자체에 크기 정보 저장, 크기 직접 반환 | O(1) |
s.capacity() | 문자열이 사용 중인 메모리 크기 반환 | |
s.empty() | s가 빈 문자열인지 확인 (return 1/0) | |
s.resize(n) | 문자열을 n의 크기로 만듦 - 기존 문자열의 길이 < n : 남은 공간을 빈 공간으로 채움 - 기존 문자열의 길이 > n : n보다 큰 부분을 삭제 | |
s.resize(n, ‘a’) | n이 문자열의 길이보다 클 때 ‘a’로 빈 공간을 채움 |
s.append(t) | 문자열 s 뒤에 문자열 t를 이어 붙임 (s += t와 동일) | |
s.append(t, 1, 3) | 문자열 s 뒤에 <문자열 t[1]부터 3개의 문자>를 이어 붙임 | |
s.append(n, ‘a’) | 문자열 s 뒤에 n개의 ‘a’를 이어 붙임 | |
s.insert(n, t) | 문자열 s의 s[n] 앞에 문자열 t를 삽입함 | O(N) |
s.replace(n. k, t) | 문자열 s의 s[n]부터 k개의 문자를 t로 대체함 | |
s.clear() | 문자열 s를 모두 지움 | |
s.erase(n, m) | 문자열 s의 n번째 문자부터 m개의 문자를 지움 | O(N) |
s.erase(it1, it2) | 문자열 s의 it1부터 it2까지 지움 | O(N) |
s.erase() | s.clear()와 동일 | |
s.push_back(’c’) | 문자열 s의 맨 뒤에 문자 c를 붙임 | O(1) |
s.pop_back() | 문자열 s의 맨 뒤에 문자 하나를 제거 | O(1) |
s.assign(t) | s = t 정의와 동일 |
s.find(”abcd”) | “abcd”가 문자열 s에 포함되는지 확인하고, 있으면 해당 부분의 첫번째 index 반환 | O(N) |
s.find(”abcd”, n) | n번째 index부터 “abcd”를 찾고, 있으면 해당 부분의 첫번째 index 반환 | O(N) |
s.substr() | 문자열 s 전체를 반환 | O(N) |
s.substr(n) | 문자열 s의 n번째 index부터 끝까지의 문자를 부분 문자열로 반환 | O(N) |
s.substr(n, k) | 문자열 s의 n번째 index부터 k개의 문자를 부분 문자열로 반환 | O(N) |
isdigit(s[0]) | s[0] 문자가 숫자이면 true, 아니면 false 반환 | |
isalpha(s[0]) | s[0] 문자가 영어이면 true, 아니면 false 반환 |
s[0] - ‘0’
으로 구현 가능string s = "51";
int a = str[0] - '0'; // 5
int b = str[1] - '0; // 1
(참고) https://0m1n.tistory.com/18
stoi()
함수 이용string s = "51";
int num = stoi(s); // 51
char a = 'a';
cout << (int)a; // 97
cout << (int)a - 97; // 0
cout << (int)a - 'a'; // 0
(참고) https://yunaaaas.tistory.com/101
remove
#include <algorithm>
를 까먹지 않게 주의erase
remove
후 남아있는 빈 공간을 삭제#include <string>
을 까먹지 않게 주의s.erase(remove(s.begin(), s.end(), ' '), s.end());
#include <sstream>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string line = "first second third fourth";
stringstream sstream(line);
string token;
while(getline(sstream, token, ' ')) cout << token << "\n";
/*
first
second
third
fourth
*/
return 0;
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s = "apple,pear,peach,melon";
vector<string>v;
int prev_index = 0;
int cur_index = s.find(","); // s의 처음부터 ","를 찾아서 index를 반환
while(cur_index != string::npos) {
string sub_s = s.substr(prev_index, cur_index - prev_index);
v.push_back(sub_s);
prev_index = cur_index + 1;
cur_index = s.find(",", prev_index);
}
// 뒤에 ,가 없는 마지막 melon
v.push_back(s.substr(prev_index, cur_index - prev_index));
for (int i = 0; i < v.size(); i++) {
cout << v[i] << "\n";
}
return 0;
}
(참고) https://will-behappy.tistory.com/29
https://rebro.kr/53
https://ansohxxn.github.io/cpp/chapter17-3/#-용량-capacity