c언어에서는 볼 수 없었던 string 클래스는 문자열 저장과 처리에 필요한 변수와 함수들이 정의되어있다.
string 클래스를 사용하면 배열의 크기를 항상 신경써야 했던 c언어와는 다르게 문자열의 크기에 대해 신경하지 않아도 되는 장점을 갖고있다. 내부 구현을 몰라도 얼마든지 string 클래스 안의 멤버 함수들을 사용할 수 있다는 객체 지향의 장점까지 갖고 있다.
+)그리고 c언어에서 처럼 char형 배열을 선언하지 않아도 된다. string 객체인 경우, 문자열 입력 시에 공간이 부족하면 자동적으로 크기에 맞추어 공간이 재할당됨.
우선 string 클래스를 사용하기 위해선 <string>이라는 이름의 헤더파일을 포함시켜야 한다.
string클래스는 std 이름 공간에 속해있기 때문에, using namespace std; 을 작성하는 것 또한 잊지 말아야한다.
그렇게되면 string 클래스를 사용하기 위한 기본틀은 다음과 같다.
#include <iostream>
#include <string>
using namespace std;
int main(){
string s; // string 객체를 생성한다.
return 0;
}
▼ string 클래스의 멤버 함수들은 다음과 같다.
멤버 함수 | 설명 |
s[i] | i번째 원소 |
s.empty() | s가 비어있으면 true 반환 |
s.insert(pos , s2) | s의 pos 위치에 s2를 삽입 |
s.remove(pos, len) | s의 pos 위치에 len만큼을 삭제 |
s.find(s2) | s에서 문자열 s2가 발견되는 첫 번째 인덱스를 반환 |
s.find(pos, s2) | s의 pos 위치부터 문자열 s2가 발견되는 첫 번째 인덱스를 반환 |
string 클래스를 사용하면 char형 배열보다 쉽게 문자열을 처리할 수 있다.
1. 문자열의 결합
① + 를 이용하여 문자열들을 결합할 수 있다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Hello";
string s2 = "Good to see you.";
string sentence = s1 +" "+s2;
cout << sentence;
return 0;
}
=> sentence 출력 결과 :
② = 연산자를 사용하여 하나의 문자열 객체를 다른 문자열 객체에 할당 가능
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Hello";
string s2;
s2 = s1;
cout << s2;
return 0;
}
=> s2의 출력 결과:
③ 기존의 문자열에 다른 문자열을 추가하고 싶은 경우 += 연산자를 사용할 수 있음.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Hello";
string s2 = " love you";
s1+= s2;
cout << s1;
return 0;
}
=> s1의 출력 결과:
2. 문자열의 비교
== 연산자나 >, < 연산자들을 사용하여 문자열을 비교할 수 있다.
( == 연산자 : 문자열이 동일한지 검사 가능)
(> , < 연산자: 사전적인 순서로 어떤 문자열이 앞이 나오는지 검사 가능)
3. 입출력
>> 연산자를 이용하여 cin에서 string 객체를 입력하는 경우 공백 문자가 있으면 입력을 중단하게 된다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s;
cout << s;
return 0;
}
=> 만약 "People always love you" 을 입력하게 되면 s의 값은 "People"이 되고 나머지 단어들은 입력을 대기하게 된다.
출력 결과:
이를 해결하기 위해선 (전체 라인을 읽기 위해선) getline() 이라는 함수를 사용한다.
getline()은 cin의 멤버 함수가 아니다. getline()은 매개 변수로 cin을 받는다. getline()도 string 라이브러리에 정의되어 있음
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin, s);
cout << s;
return 0;
}
출력 결과:
만약 한 문자씩 읽고자 한다면 cin의 멤버함수인 get()을 사용할 수 있다.
4. 문자 추출
배열처럼 [] 연산자를 이용하여 string 객체에서 각각의 문자를 추출할 수 있다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >>s;
cout << s[1];
return 0;
}
출력 결과:
'프로그래밍 언어 💬 > C++' 카테고리의 다른 글
[백준] 2442번, 2445번, 2446번, 2552번 [별찍기 (2)] (0) | 2020.12.31 |
---|---|
[백준] 2439번, 2440번, 2441번 [별찍기 (1)] (0) | 2020.12.31 |
[백준] 11720번 (0) | 2020.12.26 |
[백준] 10953번 (0) | 2020.12.26 |
[백준] 10951번 (0) | 2020.12.26 |