기록은 기억을 이기고 시간보다 오래 남는다.

프로그래밍 언어/c++

[C++]size_t 와 string::npos란 무엇일까?

준_준 2023. 4. 29. 21:23

안녕하세요 준준입니다.

이번 게시글에서는 size_tstring::npos에 대해서 알아보도록 하겠습니다.

 

size_t란? 

size_t는 C++ 표준 라이브러리에서 정의된 데이터 타입으로, 부호 없는 정수형(unsigned integer)으로 사용됩니다. 

size_t는 보통 메모리 할당, 배열 인덱스, 문자열 길이 등을 나타내는데 사용됩니다. 

size_t는 각각의 플랫폼에서 동일한 크기를 가지도록 보장되어 있으며, 

대부분의 컴파일러에서는 32비트에서는 4바이트, 64비트에서는 8바이트로 정의되어 있습니다. 

 

string::npos란?

 string::npos는 C++ 표준 라이브러리에서 제공하는 상수로, 

문자열에서 해당 문자열이 존재하지 않는 경우를 나타내는 값입니다. 

예를 들어, string::find() 함수는 문자열에서 찾는 문자열이 존재하지 않는 경우 string::npos 값을 반환합니다. 

이 값은 일반적으로 -1과 같은 값을 가지며, unsigned 타입인 size_t로 정의되어 있습니다. 

따라서, 문자열에서 특정 문자열을 찾는 코드를 작성할 때는 string::find() 함수를 사용하여

 찾고자 하는 문자열이 존재하는지 확인한 후, string::npos 값과 비교하여 처리할 수 있습니다.

 

 

 

아래는 size_t와 npos를 활용한 예제 코드입니다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    vector<string> strs = {"10 x2", "5 +100", "20 +200"};

    for (string str : strs) {
        size_t x_pos = str.find("x");
        size_t plus_pos = str.find("+");

        if (x_pos != string::npos) {  // "x"를 찾은 경우
            string first_str = str.substr(0, x_pos);
            string second_str = str.substr(x_pos + 1);

            int first_num = stoi(first_str);
            int second_num = stoi(second_str);

            cout << first_num << ", " << second_num << endl;
        }
        else if (plus_pos != string::npos) {  // "+"를 찾은 경우
            string first_str = str.substr(0, plus_pos);
            string second_str = str.substr(plus_pos + 1);

            int first_num = stoi(first_str);
            int second_num = stoi(second_str);

            cout << first_num << ", " << second_num << endl;
        }
    }

    return 0;
}
반응형