Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ strtol() 함수 완벽 정리 – 문자열을 long 정수로 변환하는 방법

C++의 strtol() 함수는 문자열(string)을 long 정수(long int)로 변환할 때 사용하는 함수입니다. 이 함수는 변환된 마지막 유효 문자 다음 위치를 가리키도록 포인터를 설정해 주기 때문에, 숫자 뒤에 붙어 있는 나머지 문자열도 쉽게 확인할 수 있습니다.

strtol() 함수는 cstdlib 헤더 파일에 포함되어 있으며, 함수 원형은 다음과 같습니다.

long int strtol(const char* str, char** end, int base)

strtol() 함수의 매개변수

이 함수는 세 개의 인자를 받습니다.

  • str: 변환을 시작할 문자열의 시작 주소입니다.
  • str_end: 함수가 자동으로 설정하는 포인터입니다. 마지막으로 읽은 유효 문자 다음 문자를 가리키며, 더 이상 남은 문자가 없으면 NULL을 가리킵니다.
  • base: 숫자를 해석할 진법(밑)을 지정합니다. 지정 가능한 값은 0, 2, 3, …, 35, 36입니다.

반환값

strtol() 함수는 변환된 long int 값을 반환합니다. 만약 변환할 수 있는 문자가 없거나 포인터가 NULL을 가리키면 0을 반환합니다.

예제 1: base = 10 (10진수)

다음 예제에서는 10진수(base = 10)를 기준으로 문자열 앞부분의 숫자를 long 정수로 변환하고, 남은 문자열을 함께 출력합니다.

#include <iostream>
#include <cstdlib>
using namespace std;

main() {
    // 두 개의 문자열 정의
    char string1[] = "777HelloWorld";
    char string2[] = "565Hello";
    char* End; // 끝 위치를 가리킬 포인터
    int base = 10;
    int value;

    value = strtol(string1, &End, base);
    cout << "문자열 값 = " << string1 << "\n";
    cout << "long int 변환 값 = " << value << "\n";
    cout << "남은 문자열 = " << End << "\n"; // 정수 이후의 나머지 문자열

    value = strtol(string2, &End, base);
    cout << "\n문자열 값 = " << string2 << "\n";
    cout << "long int 변환 값 = " << value << "\n";
    cout << "남은 문자열 = " << End; // 정수 이후의 나머지 문자열
}

실행 결과

문자열 값 = 777HelloWorld
long int 변환 값 = 777
남은 문자열 = HelloWorld

문자열 값 = 565Hello
long int 변환 값 = 565
남은 문자열 = Hello

출력 결과를 보면, strtol() 함수는 문자열 시작 부분의 연속된 숫자만 읽어 정수로 변환하고, End 포인터에는 그 뒤에 남아 있는 문자열("HelloWorld", "Hello")이 저장된 것을 확인할 수 있습니다.

예제 2: base = 16 (16진수)

이번에는 진법을 16으로 지정한 예제입니다. 16진수 형식의 문자열을 입력하면 해당 값을 10진수로 변환하여 출력합니다.

#include <iostream>
#include <cstdlib>
using namespace std;

main() {
    // 두 개의 문자열 정의
    char string1[] = "5EHelloWorld";
    char string2[] = "125Hello";
    char* End; // 끝 위치를 가리킬 포인터
    int base = 16;
    int value;

    value = strtol(string1, &End, base);
    cout << "문자열 값 = " << string1 << "\n";
    cout << "long int 변환 값 = " << value << "\n";
    cout << "남은 문자열 = " << End << "\n"; // 정수 이후의 나머지 문자열

    value = strtol(string2, &End, base);
    cout << "\n문자열 값 = " << string2 << "\n";
    cout << "long int 변환 값 = " << value << "\n";
    cout << "남은 문자열 = " << End; // 정수 이후의 나머지 문자열
}

실행 결과

문자열 값 = 5EHelloWorld
long int 변환 값 = 94
남은 문자열 = HelloWorld

문자열 값 = 125Hello
long int 변환 값 = 293
남은 문자열 = Hello

첫 번째 문자열의 "5E"는 16진수로 해석되어 10진수 94(5×16 + 14)로 변환되었고, 두 번째 문자열의 "125" 역시 16진수 기준으로 계산되어 10진수 293(1×256 + 2×16 + 5)으로 변환되었습니다.

정리

strtol() 함수는 단순한 문자열-정수 변환을 넘어, 진법 지정과 변환 종료 위치 추적이라는 강력한 기능을 제공합니다. 특히 사용자 입력 파싱이나 설정 파일 처리처럼 숫자와 텍스트가 섞여 있는 데이터를 다룰 때 매우 유용하게 활용할 수 있습니다.