개요
C++에서는 문자 배열을 사용하지 않고 string 메서드를 include하여 사용할 수 있다.
해당 기능을 사용한다면 문자열 찾기, 문자열 잘라내기 등에 대한 기능을 사용할 수 있으며, 굳이 기능을 사용하지 않더라도 string을 사용 가능하다.
예제
1. 복사 및 비교
여타 다른 변수와 동일하게 특정 변수의 값을 다른 변수에 대입하여 복사할 수 있다.
코드
string a = "AAA";
string b = "";
b = a;
if (b == a) cout << b << " : " << a << "\n";
출력
AAA : AAA
2. 문자열 더하기
"AAA" + "BBB" = "AAABBB" 이다.
코드
string a = "AAA";
string b = "";
b = a;
string ans = a + b;
cout << ans << "\n";
출력
AAAAAA
3. 문자열의 길이
문자열의 길이를 구하는 방법은 여러가지가 존재한다.
- strlen();
- length();
- size();
코드
string a = "AAA";
string b = "";
b = a;
string ans = a + b;
int length = ans.size();
cout << length << "\n";
출력
6
4. 문자열 찾기
str.find()를 사용해 문자열내 특정 문자열을 찾을 수 있다.
target이 되는 문자열을 찾으면 문자열의 시작 인덱스를 리턴
target이 되는 문자열을 못 찾으면 return -1
string::nops == int 최대 크기 리턴(상수값)
코드
string v = "ABKFCASDFWERSDFASDFE";
int pos = v.find("LEE");
cout << pos << "\n";
출력
-1
5. 문자열 잘라내기
str.substr 메서드를 사용해 문자열을 잘라내고 새로운 문자열을 반환한다.
str.substr(index); 매개변수가 하나인 경우
원본 문자열의 index(포함)부터 문자열의 끝까지 잘라내기
str.substr(index, 크기); 매개변수가 두개인 경우
원본 문자열의 index(포함)부터 크기만큼만 잘라내기
코드
string str = "AABF[12345]DFDSE";
// 1. find() 특정 문자 찾기
int idx = str.find('[');
// 2. 잘라내기
string substr_result = str.substr(idx + 1, 5);
cout << substr_result << "\n";
출력
12345
6. 문자열 정수 변환
stoi() 메서드를 통해 문자열을 정수로 변경하여 반환할 수 있다.
반대로 to_string() 메서드를 통해 인자로 받은 내용을 문자열로 변경하여 반활할 수 있다.
실습
1. string 배열 내 각각의 요소가 특정 문자열을 포함하고 있는지 여부를 파악하기
코드
//Q1.
string vect[4] = {
"ABBT",
"BTBT&",
"BBBT#",
"KFC"
};
// "BB" 찾기
for (auto v : vect) {
if (v.find("BB") != v.npos) cout << "O\n";
else cout << "X\n";
}
출력
O
X
O
X
2. string 배열 내 각각의 요소를 역순으로 출력하기
코드
string vect[4] = {
"ABBT",
"BTBT&",
"BBBT#",
"KFC"
};
for (auto v : vect) {
for (int i = v.size() - 1; i >= 0; i--) {
cout << v[i];
}
cout << "\n";
}
출력
TBBA
&TBTB
#TBBB
CFK
3. A - Z 문자열 내 특정 인덱스 사이의 알파벳을 출력하기
- A부터 Z까지의 문자열을 만들기
- 숫자 두개 (a, b)를 입력
- a - b index 사이의 값을 출력
코드
string abc = "";
for (char i = 'A'; i <= 'Z'; i++) {
abc += i;
}
int n1, n2;
cin >> n1 >> n2;
string go = abc.substr(n1, n2 - n1 + 1);
cout << go << "\n";
입력
2 5
출력
CDEF
4. 특정 패턴을 가진 문자열 찾기
배열 안에 문자열들이 존재한다, 각 요소 문자열 중 대괄호([ ])로 감싸져 있는 경우 그 안의 문자열을 출력하자
코드
string vec[4] = {
"ABCQ",
"B[4]AS",
"C[34]C",
"BT[15]"
};
for (auto v : vec) {
int find_index1 = v.find('[');
int find_index2 = v.find(']');
string find_num = v.substr(find_index1 + 1, find_index2 - find_index1 - 1);
cout << find_num << "\n";
}
출력
4
34
15
4-1. 특정 패턴을 가진 문자열 찾기(응용)
문자열 내 일부 숫자가 대괄호([ ])로 둘러싸여 있다, 대괄호 내 숫자들의 합을 구하자
코드
string aaa = "AB[45]AB[123213]";
int sum = 0;
while (aaa.find('[') != aaa.npos) {
int i1 = aaa.find('[');
int i2 = aaa.find(']');
string s1 = aaa.substr(i1 + 1, i2 - i1 - 1);
aaa = aaa.substr(i2 + 1);
sum += stoi(s1);
}
cout << sum << "\n";
출력
123258
4-2. 배열 내 특정 문자열 의 개수 찾기(응용)
코드
string vectt[3] = {
"BTSGOLD",
"GOLDGOLD",
"GOLDBARGOLD"
};
int cntt = 0;
for (auto v : vectt) {
int st = 0;
while (1) {
int id = v.find("GOLD", st);
if (id == -1) break;
cntt++;
st = id + 1;
}
}
cout << cntt;
출력
5
5. 문자열 내 구분기호로 분리된 정수끼리 더하기
문자열 내 '-'로 구분되어 있는 정수들끼리의 합을 구하자
코드
string str = "1231-1231-434-77-123";
stringstream ss(str);
int sum = 0;
string temp;
while (getline(ss, temp, '-')) {
sum += stoi(temp);
}
cout << sum;
출력
3096
'알고리즘 공부 > 알고리즘' 카테고리의 다른 글
그리디 알고리즘 Greedy Algorithm C++ (0) | 2024.07.25 |
---|---|
정렬 Sort C++ (0) | 2024.07.25 |
벡터 Vector C++ (2) | 2024.07.23 |
방향 배열 (2) | 2024.07.23 |
DAT (Direct Access Table) 배열 활용법 (1) | 2024.07.22 |