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

C/C++에서 문자열을 숫자로 변환하는 방법

이 글에서는 C/C++에서 문자열(string)을 숫자(number)로 변환하는 방법에 대해 자세히 알아보겠습니다.

C/C++에서는 문자열을 숫자로 변환할 때 크게 두 가지 방법을 사용할 수 있습니다. 하나는 C 스타일 함수인 sscanf()이고, 다른 하나는 C++11에서 도입된 stoi()입니다.

1. sscanf() 함수 사용하기

sscanf()<stdio.h> 헤더에 정의된 함수로, 형식 지정자(%d, %f 등)를 활용해 문자열에서 원하는 타입의 값을 추출할 수 있습니다. C와 C++ 양쪽에서 모두 동작한다는 장점이 있습니다.

예제 코드

#include<stdio.h>
int main(){
    const char *str = "12345";
    int x;
    sscanf(str, "%d", &x);
    printf("\nThe value of x : %d", x);
    return 0;
}

실행 결과

The value of x : 12345

위 예제에서는 문자열 "12345"%d 형식 지정자를 통해 정수형 변수 x에 저장했습니다. 실무에서는 sscanf()의 반환값(성공적으로 읽은 항목 수)을 확인하여 변환이 제대로 되었는지 검사하는 것이 좋습니다.

2. stoi() 함수 사용하기

stoi()(string to integer)는 C++11부터 표준 라이브러리에 포함된 함수로, std::string 객체를 int 타입으로 손쉽게 변환해 줍니다. <string> 헤더를 포함해야 사용할 수 있습니다.

예제 코드

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str1 = "45";
    string str2 = "3.14159";
    string str3 = "31337 geek";
    int myint1 = stoi(str1);
    int myint2 = stoi(str2);
    int myint3 = stoi(str3);
    cout << "stoi(\"" << str1 << "\") is " << myint1 << '\n';
    cout << "stoi(\"" << str2 << "\") is "<< myint2 << '\n';
    cout << "stoi(\"" << str3 << "\") is " << myint3 << '\n';
    return 0;
}

실행 결과

stoi("45") is 45
stoi("3.14159") is 3
stoi("31337 geek") is 31337

stoi()의 동작 특징

위 실행 결과에서 알 수 있듯이, stoi()는 다음과 같은 특징을 가집니다.

  • 소수점 처리: "3.14159"처럼 실수 형태의 문자열을 입력하면, 소수점 이하는 무시되고 정수 부분만 반환됩니다(결과: 3).
  • 문자 처리: "31337 geek"처럼 숫자 뒤에 문자가 붙어 있으면, 숫자 부분까지만 파싱하고 나머지는 버립니다(결과: 31337).

참고로, 문자열 전체가 유효한 숫자가 아니면 std::invalid_argument 예외가 발생할 수 있으므로, 실제 프로젝트에서는 try-catch 블록으로 감싸 예외 처리를 해주는 것이 안전합니다. 실수(double)로 변환이 필요하다면 stod() 함수를 사용할 수 있습니다.