문제
많은 학생들이 문자열을 다루는데 힘들어하고 있습니다.
그렇기에 오늘은 문자열을 좀더 쉽고 간단하게 다룰 수 있는 C++ 자료형 하나 소개하고자 합니다.
C++ string 클래스는 문자열(string)을 다루는 클래스 입니다.
C언어의 char*, char[] 문자열과 달리, 문자열끝에 '\0'이 들어있지 않고, 길이가 동적으로 변경이 됩니다.
다만 std::string은 scanf로 바로 입력을 할 수가 없습니다.
그래서 C++의 표준 입출력 cin, cout 을 사용해야 합니다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string word, sentence; // 문자열 두개 선언
cin >> word; // 공백(엔터) 이전까지의 문자열을 입력 받음
cin.ignore(); // 입력 버퍼의 문자 하나 제거. (cin 후 getline 시 '\n'과 같은 불필요한 문자 제거용도로 필요, getline 홀로 사용되는 경우 쓰면 안됨)
getline(cin, sentence); // '\n' 이전까지의 문자열을 공백을 포함하여 입력 받음
cout << word << '\n'; // 출력
cout << sentence << '\n'; // 출력
return 0;
}
string 클래스를 사용하면 편리한 점은 우선 연산자를 사용할 수 있다는 겁니다.
아래와 같이 ==, <, >, +와 같은 연산자의 사용이 가능합니다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a = "abc", b = "de", c;
// 아래 코드는 a와 b가 같다면 c가 a와 같은 문자열이 되고,
// a가 사전순으로 b보다 앞서면 c는 a에 b를 이어쓴 문자열이 되며,
// 반대의 경우 c는 b에 a를 이어쓴 문자열이 된다.
if(a == b) c = a; // c = "abc"
else if(a < b) c = a + b; // c = "abcde"
else c = b + a; // c = "deabc"
cout << c;
return 0;
}
그 외에도 다양한 함수들을 통하여 문자열을 쉽고 간단하게 처리 할 수 있습니다.
예제 코드를 따라 작성하여 함수들을 익힌 후 문제를 풀어봅시다.
문자열의 길이 구하기: length()
문자열에서 다른 문자열이 있는 위치(인덱스) 구하기: find(다른문자열)
문자열에서 부분문자열 추출하기: substr(시작인덱스, 길이)
문자열에서 일정부분 지우기: erase(시작인덱스, 길이)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string A = "I love coding!";
// 문자열 A의 길이 구하기
int len = (int) A.length();
// 문자열 A에서 문자열 "coding"이 있는 인텍스 찾기
int idx = A.find("coding"); // idx: 7
// 문자열 A에서 문자열 "abc"이 있는 인텍스 찾기
int x = A.find("abc"); // 없으면 A.find("abc") == string::npos
// 문자열 A의 인텍스 2부터 길이 4에 해당하는 부분문자(substring) "love" 추출하기
string sub = A.substr(2, 4);
// 문자열 a의 인텍스 1부터 길이 5에 해당하는 부분 삭제
A.erase(1, 5); // A: "I coding!"
return 0;
}
[문제]
아래 조건을 만족하는 프로그램을 작성하시오.
ⓐ. 문자열 S와 T를 입력 받는다.
ⓑ. 문자열 S의 첫 문자부터 검열하다가 T문자열을 만나면 삭제하고 이후 문자열을 이어 붙인다.
ⓒ. 문자열 S에서 금지된 문자열 T가 발견되지 않을 때까지 ⓑ를 반복한다.
ⓓ. S의 남은 문자열을 출력한다.
입력
첫 번째 줄에 문자열 S를 입력받으시오. (1 <= S의 길이 <= 100)
두 번째 줄에 문자열 T를 입력받으시오. (1 <= T의 길이 <= S의 길이)
출력
문제에서 제시된 작업을 수행한 후 첫 번째 문자열 S에 남은 문자열을 출력한다. 출력할 문자열이 남아 있음을 보증한다.
예제1
whatthemomooofun
moo
whatthefun