페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4987

String 자료형 (C++) 1초 256MB

문제

많은 학생들이 문자열을 다루는데 힘들어하고 있습니다.

그렇기에 오늘은 문자열을 좀더 쉽고 간단하게 다룰 수 있는 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


태그


출처

@klee

역링크