알고리즘 공부/알고리즘

문자열 String C++

마달랭 2024. 7. 24. 10:52
반응형

개요

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
728x90
반응형

'알고리즘 공부 > 알고리즘' 카테고리의 다른 글

그리디 알고리즘 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